我想寫使用,我希望兩個線程,線程1和線程之間交替程序兩個線程之間交替。棘手的部分是線程應該開始執行,首先必須是線程1。 這是代碼我到目前爲止:多線程 - 使用條件和事件在Python
Class Client:
#member variables
def sendFile(self,cv1,lock1):
sent=0;
while (i<self.size):
message = self.data[i:1024+i]
cv1.acquire()
BadNet.transmit(self.clientSocket,message,self.serverIP,self.serverPort)
cv1.notify()
cv1.release()
i = i+1024
sent+=1
lock1.wait()
print "File sent successfully !"
self.clientSocket.close()
def receiveAck(self,cv1,lock2):
i=0
while (1):
lock1.clear()
cv1.acquire()
cv1.wait()
print "\nentered ack !\n"
self.ack, serverAddress = self.clientSocket.recvfrom(self.buf)
cv1.release()
lock1.set()
if __name__ == "__main__":
lock1 = Event()
cv1 = Condition()
cv2= Condition()
client = Client();
client.readFile();
thread1 = Thread(target = client.sendFile, args=[cv1,lock1])
thread2 = Thread(target = client.receiveAck, args=[cv1,lock1])
thread1.start()
thread2.start()
thread1.join()
thread2.join()
我目前面臨的問題是,最初的程序執行兩個線程之間交替(由在控制檯上輸出確認,但迭代任意數目後(通常介於20和80)的程序只是掛起並且不執行進一步的迭代。
我的第一個問題是,你爲什麼要這樣做?如果他們只是明確地交換控制權,那麼有兩個線程有什麼意義呢?您可以使用一個生成器更輕鬆地做到這一點? – abarnert
我只是爲了理解目的簡化了我的程序。實際發生的事情是,thread1使用UDP套接字發送數據包,而thread2使用相同的套接字來接收該數據包的確認。除非已收到對前一個數據包的確認,否則Thread1不應繼續進行。 我希望你明白我的意思,但即使你不這樣做,我也會要求你忽略我在兩個主題之間交替的目的,並且善意地幫助我解決我面臨的問題。 –
聲音相當順序...爲什麼使用線程而不是簡單地使用阻塞IO?阻塞,直到你得到你的ACK,然後繼續循環下一個數據包,爲什麼線程? – immortal