python線程間通信




#!/usr/bin/python
# -*- coding:utf8 -*-

from threading import Thread, Lock
import random


def test_thread():
    # 線程間的通信
    # 使用鎖來控制共享資源的訪問
    a = 0
    n = 10000000
    lock = Lock()

    def imcr(n):
        global a
        for i in range(n):
            lock.acquire()  # 可以寫成with lock:
            a += 1  # a+=1
            lock.release()

    def decr(n):
        for i in range(n):
            global a
            lock.acquire()
            a -= 1
            lock.release()

    t = Thread(target=imcr, args=(n,))
    t2 = Thread(target=decr, args=(n,))
    t.start()

    t2.start()
    t.join()
    t2.join()
    print(a)


# 多線程的消費者與生產者模式
# from threading import Thread
from queue import Queue

q = Queue(3)


class Producter(Thread):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        while True:
            item = random.randint(0, 99)
            self.queue.put(item)
            print('已產生%s' % item)


class Consumer(Thread):
    def __init__(self, queue):
        super().__init__()
        self.queue = queue

    def run(self):
        while True:
            item = self.queue.get()
            print(item)
            self.queue.task_done()  # 告訴隊列這個任務執行完成


product = Producter(q)
consumer = Consumer(q)
product.start()
consumer.start()

# 注意,mgr=Manger() q.mgr.Queue()
# 進程版本的需要加一個input()或者是
# producter.join consumer.join()  因為一旦主進程結束,代碼就不會繼續運行了



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM