如何在线程之间进行通信以请求下一个块?

问题描述:

#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() 

检查出来。我认为你传递参数的方式是错误的。

+0

谢谢你的努力!但是,我也是从上述骨架开始的,排队机制无法始终如一地工作,只是增加延迟似乎会使其稳定下来。 (我对不明确的道歉,但参数是占位符在这个片段,而不是实际的格式) – user8588756

+0

你能详细说明你的需求吗? – csurfer