更新时间:2024-03-05 来源:黑马程序员 浏览量:
在Python中,线程之间可以使用多种方式进行通信。以下是一些常见的通信方式及其示例代码:
1.共享变量:
多个线程可以通过共享变量来进行通信。但是需要注意线程安全的问题,可以使用锁(Lock)或者信号量(Semaphore)来保护共享资源的访问。
import threading shared_variable = 0 lock = threading.Lock() def thread_func(): global shared_variable for _ in range(1000000): lock.acquire() shared_variable += 1 lock.release() threads = [] for _ in range(10): t = threading.Thread(target=thread_func) threads.append(t) t.start() for t in threads: t.join() print("Final value of shared_variable:", shared_variable)
2.队列:
可以使用队列来实现线程之间的安全通信。Python中的Queue模块提供了多种队列实现,如Queue、LifoQueue和PriorityQueue。
import threading import queue q = queue.Queue() def producer(): for i in range(5): q.put(i) print("Produced", i) def consumer(): while True: item = q.get() if item is None: break print("Consumed", item) q.task_done() t1 = threading.Thread(target=producer) t2 = threading.Thread(target=consumer) t1.start() t2.start() t1.join() q.put(None) t2.join()
3.事件:
线程可以等待事件的触发或者清除。使用threading.Event类可以实现。
import threading event = threading.Event() def waiter(): print("Waiting for event") event.wait() print("Event occurred") def setter(): print("Event set") event.set() t1 = threading.Thread(target=waiter) t2 = threading.Thread(target=setter) t1.start() t2.start() t1.join() t2.join()
4.条件变量:
使用threading.Condition类可以实现多个线程之间的复杂通信。
import threading import time condition = threading.Condition() item = None def consumer(): global item with condition: condition.wait_for(lambda: item is not None) print("Consumed", item) item = None condition.notify() def producer(): global item with condition: time.sleep(1) item = "test" print("Produced", item) condition.notify() t1 = threading.Thread(target=consumer) t2 = threading.Thread(target=producer) t1.start() t2.start() t1.join() t2.join()
这些是一些常见的线程间通信方式。在选择使用哪种方式时,应根据具体的需求和情况来决定。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19