如何在线程之间进行通信以请求下一个块?
问题描述:
#Version1
main_df = pd.read_csv('Million_rows.csv')
def myfunction(args*,start,end):
for i in range(start,end):
if condition1:
for item in mainTreeSearch:
...
lock.acquire()
###write to main_df
lock.release()
noLuck = False
break
if noLuck and Acondition:
lock.acquire()
###write to main_df
lock.release()
elif
... various asymmetric decision trees...
t1 = Thread(target=myfuct, args=(args*),0,250))
t2 = Thread(target=myfuct, args=(args*),250,500))
t3 = Thread(target=myfuct, args=(args*),500,750))
t4 = Thread(target=myfuct, args=(args*),750,1000))
我的问题是,我不知道如何喂食其余行的线程,我试过Queue
,失败。如何在线程之间进行通信以请求下一个块?
#Version2
def myfuntion(args*,q)
while True:
q.get()
....same search as above...without locking
q.task_done()
q = Queue(maxsize=0)
num_threads = 5
threads =[]
for i in range(num_threads):
worker = Thread(target=myfunction, args=(args*))
worker.setDaemon(True)
threads.append(worker)
worker.start()
for x in range(1000):
#time.sleep(.005)
q.put(x)
q.join()
在版本2中,而不sleep
任1个螺纹猪的所有数据或随机崩溃发生。
在版本1中,我应该使用threading.nodify()
机制,如果是这样,它是如何实现的?
答
我把它格式化这个和它的作品如预期
from Queue import Queue
import threading
q = Queue()
def myfuntion(q):
while True:
val = q.get()
print('\n' + str(threading.currentThread()))
print('\n' + str(val))
q.task_done()
num_threads = 5
threads = []
for i in range(num_threads):
worker = threading.Thread(target=myfuntion, args=(q,))
worker.setDaemon(True)
threads.append(worker)
worker.start()
for x in range(1000):
q.put(x)
q.join()
检查出来。我认为你传递参数的方式是错误的。
谢谢你的努力!但是,我也是从上述骨架开始的,排队机制无法始终如一地工作,只是增加延迟似乎会使其稳定下来。 (我对不明确的道歉,但参数是占位符在这个片段,而不是实际的格式) – user8588756
你能详细说明你的需求吗? – csurfer