【问题标题】:Python threading flow control in concise way简洁的Python线程流控制
【发布时间】:2011-05-07 00:57:10
【问题描述】:
我想上传一个文件到两个 ftp 站点。都完成后,我需要删除文件。
在不阻塞main函数运行的情况下,ftp和delete函数都将通过线程来实现,也就是说后台会有3个线程同时运行。一个简单的问题因为线程而变得复杂。
以下是可能的解决方案:
- 使用队列并将所有三个线程按顺序排列
- 使用互斥锁
两者都有效,但我认为它们不是最好的方法。任何人都可以分享他/她的想法吗?
【问题讨论】:
标签:
python
multithreading
mutex
【解决方案1】:
使用信号量。
在您的父处理程序中创建一个 0 的信号量并将其交给线程。
import threading
sem = threading.Semaphore(0)
hostThread = threading.Thread(target=uploadToHost, args=(sem,))
backupThread = threading.Thread(target=uploadToBackup, args=(sem,))
sem.acquire() # Wait for one of them to finish
sem.acquire() # Wait for the other to finish
对于您的孩子,您只需在上传完成后致电sem.release。