繁体   English   中英

如何在python中将参数传递给正在运行的线程

[英]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

我看到以下问题:

  1. 使用threading代替thread thread在Python3中消失了。
  2. 您将flag初始化为一个字符串列表,但是随后通过添加1(整数)来递增每个元素。 那行不通。
  3. 该线程无法查看全局变量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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM