python的线程间通讯

1年前 (2023-09-12)阅读134回复0
吕岭路
吕岭路
  • 注册排名10019
  • 经验值10
  • 级别
  • 主题2
  • 回复0
楼主

随着计算机科学的不断发展,多线程编程已经成为热门话题,因为它可以提高程序的执行效率,使得程序更加快速。而在Python中,线程间通讯(Thread Communication)是多线程编程中的重要概念。

Python线程是轻量级的,因此它们可以在操作系统级别进行交互, Python提供了几种方法来实现线程间通讯,包括 shared data(共享数据), message passing(消息传递)以及 synchronization primitives(同步机制)。

import threading
mutex = threading.Lock()
count = 0
class MyThread(threading.Thread):
def __init__(self, threadName, startCount):
threading.Thread.__init__(self, name=threadName)
self.startCount = startCount
def run(self):
global count
while True:
mutex.acquire()
count += self.startCount
print('Count:', count)
mutex.release()

在上述Python线程代码片段中,我们使用了threading包来创建MyThread类,并定义了全局变量count和锁(mutex)。在MyThread的run()方法中,我们使用acquire()获取锁,然后将count的值增加,然后在控制台上打印信息,最后使用release()释放锁。

在Python中,线程间通讯可以使用Queue类来实现,它是一个结构化的线程安全队列,可以让线程安全地交换对象。

import threading
import queue
q = queue.Queue(maxsize=10)
def worker():
while True:
item = q.get()
print(f'Thread: {threading.current_thread().name} got {item}')
q.task_done()
threading.Thread(target=worker, daemon=True).start()
for item in range(20):
q.put(item)
print('All task requests sent')
q.join()
print('All work received and done')

在上面的代码片段中,我们使用了一个daemon线程来执行worker()函数,它被用于从队列中获取数据,并打印线程名(使用current_thread()函数获取当前的线程名)。我们通过使用q.put()函数将数据放到队列中,并使用q.task_done()函数通知队列有一项任务已经执行完毕。在主线程中,我们通过使用join()函数等待队列中所有任务完成,最后在控制台上打印一条成功的信息。

本文可能转载于网络公开资源,如果侵犯您的权益,请联系我们删除。

本文地址:https://www.pyask.cn/info/301.html

0
回帖

python的线程间通讯 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息