写一个多线程回调函数的案例,主线程可注册
时间: 2024-09-14 20:17:24 浏览: 43
duoxiancheng.zip_C# duoxiancheng_多线程 界面
在Python的`threading`模块中,我们可以创建一个简单的多线程示例,其中包含一个主线程和一个工作线程。主线程可以注册一个回调函数,在工作线程完成任务后被调用。这里是一个基础的例子:
```python
import threading
# 定义线程安全的队列
queue = threading.Queue()
# 定义工作线程函数,该函数从队列中获取任务,并执行后再发送结果到队列
def worker_thread():
while True:
task = queue.get()
if task is None: # 信号停止时,取None作为退出标志
break
result = do_something_with_task(task)
queue.put(result) # 将结果放入队列
print(f"Task {task} finished with result {result}")
# 主线程注册回调函数
def on_task_done(callback):
def wrapper(task_result):
callback(task_result)
return wrapper
# 注册回调函数,例如打印结果
main_thread_callback = on_task_done(print)
# 创建并启动工作线程
worker = threading.Thread(target=worker_thread)
worker.start()
# 将任务添加到队列,然后主线程继续运行
for i in range(5):
queue.put(i)
main_thread_callback(i) # 这里相当于在主线程中立即调用了回调函数
# 向队列添加None信号工作线程停止
queue.put(None)
worker.join() # 等待工作线程结束
```
在这个例子中,工作线程无限循环地从队列中取出任务执行,完成后将结果放回队列。当主线程想要执行某个任务时,它先调用`on_task_done`注册回调函数,实际的任务执行(如`do_something_with_task`)则是由工作线程负责的。当任务完成时,工作线程会将结果传递给回调函数。
阅读全文