Discuss / Python / threading.local()

threading.local()

Topic source

神月宗

#1 Created at ... [Delete] [Delete and Lock User]

#coding=utf-8

#传入数据互不干扰!

import threading import time

def print_info(name,age,score):

print "your infomation:\n"
print "name:%5s"%name
print "age:%7d"%age
print "score:%5d"%score
time.sleep(5)

def SetValue(name,age,score): Name = local.A = name Age = local.B = age Score = local.C = score print_info(Name,Age,Score)

if name == "main": local = threading.local() t1 = threading.Thread(target=SetValue,args=('Chris iven',19,89),name = 'Thread_iven') t2 = threading.Thread(target=SetValue,args=('Chris jack',18,90),name = "Thread_jack") t1.start() t2.start() t1.join() t2.join() print "OK!"

#i will be a pythoner!

神月宗

#2 Created at ... [Delete] [Delete and Lock User]

抱歉,激动了,哪里错了请大大们指出来.Thanks!

浴火化影

#3 Created at ... [Delete] [Delete and Lock User]

你这个就是在传递参数嘛,完全没有用到全局变量的性质去掉local根本不影响

你的输出不对吗?

@神月宗,你之前的确实是 标准的传递函数 我稍微改了一下:

import threading

def print_info():

# 获取当前线程关联的 name,age,score
name = local.A
age = local.B
score = local.C
print("
your infomation:\nname:%5s\nage:%7d\nscore:%5d" 
% (name,age,score)
)

def SetValue(name,age,score):

# name,age,score将分别绑定于 ThreadLocal
local.A = name
local.B = age
local.C = score
print_info()

if name == "main":

#创建全局 ThreadLocal 对象
local = threading.local()   
t1 = threading.Thread(target=SetValue,args=('Chris iven',19,89),name = 'Thread_iven')
t2 = threading.Thread(target=SetValue,args=('Chris jack',18,90),name = "Thread_jack")
t1.start()
t2.start()
t1.join()
t2.join()
print("OK!")

  • 1

Reply