2017-11-04 6 views
1
#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을 성공적으로 시도하지 못했다. 모든 데이터 또는 임의의 충돌이 일어날 sleep 1 개 스레드 돼지 중 하나없이 버전 2에서다음 블록을 요청하기 위해 스레드간에 통신하는 방법은 무엇입니까?

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

.

버전 1에서는 threading.nodify() 메커니즘을 사용해야합니까? 그렇다면 구현 방법은 무엇입니까?

답변

0

나는이 그것을 포맷하고 확인

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