[英]how to pass arguments to a running thread in python
我是线程新手。 我正在使用4个线程在4种不同的东西上运行我的函数。 现在,我需要在函数中设置一个标志,对每个标志进行不同的计算。 最好的方法是什么? 我正在尝试这样做,这是正确的。 如果有更好的方法,请提出建议。
def func(i,flag):
while True:
if flag==0:
something
else:
something else
flag-=1
flag=["0","0","0","0"]
try:
thread.start_new_thread( func, (10,flag[0], ) )
thread.start_new_thread( func, (11,flag[1], ) )
thread.start_new_thread( func, (12,flag[2], ) )
thread.start_new_thread( func, (13,flag[3], ) )
except:
print "Error: unable to start thread"
#after sometime
flag[0]+=1
flag[2]+=1
我看到以下问题:
threading
代替thread
。 thread
在Python3中消失了。 flag
初始化为一个字符串列表,但是随后通过添加1(整数)来递增每个元素。 那行不通。 flag
。 您在“一段时间后”对列表所做的更改不会影响func
的局部变量flag
。 它们是两个不同的对象。 修改列表元素不会更改最初传递给func
的值,因为它是一个简单的字符串; Python中的字符串具有值(而不是引用)语义。 请尝试以下操作:
flag=[0,0,0,0]
def func(i,thread_index):
if flag[thread_index] == 0:
something
else:
something else
flag[thread_index] -= 1
try:
thread.start_new_thread( func, (10,0))
thread.start_new_thread( func, (11,1))
thread.start_new_thread( func, (12,2))
thread.start_new_thread( func, (13,3))
except:
print "Error: unable to start thread"
#after sometime
flag[0] += 1
flag[2] += 1
这是相当粗糙的,但是它可以满足您的需求。 flag
是一个全局列表,每个线程访问该列表内的唯一索引。 当主线程访问列表时,您会看到func
的更改,因为它通过封闭的容器(列表)对象访问每个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.