多线程#

demo#

from threading import Thread
from time import sleep, ctime


class MyClass(object):

    def func(self,name,sec):
        print('---开始---', name, '时间', ctime())
        sleep(sec)
        print('***结束***', name, '时间', ctime())

def main():
    # 创建 Thread 实例
    t1 = Thread(target=MyClass().func, args=(1, 1))
    t2 = Thread(target=MyClass().func, args=(2, 2))

    # 启动线程运行
    t1.start()
    t2.start()

    # 等待所有线程执行完毕
    t1.join()  # join() 等待线程终止,要不然一直挂起
    t2.join()

if __name__=="__main__":
    main()

结果

---开始--- 1 时间 Mon Sep 25 07:50:30 2023
---开始--- 2 时间 Mon Sep 25 07:50:30 2023
***结束*** 1 时间 Mon Sep 25 07:50:31 2023
***结束*** 2 时间 Mon Sep 25 07:50:32 2023

互斥锁#

核心代码

mutex = threading.Lock()

mutex.acquire()
xxx
mutex.release()
import threading
import time
import random

class MyThread(threading.Thread):
    def __init__(self, name, mutex, arg):
        threading.Thread.__init__(self, daemon=True)
        self.name = name
        self.mutex = mutex
        self.arg = arg

    def log(self, msg):
        print("{0} - {1} - {2}".format(self.name, time.time(), msg))

    def sleep(self):
        time.sleep(random.randint(1, 5))

    def run(self):
        for i in range(10):
            self.log("do something")
            self.sleep()

        self.mutex.acquire()
        self.arg['count'] = self.arg.get('count', 0) + 1
        self.mutex.release()


def test_thread():
    mutex = threading.Lock()
    arg = dict()
    arg['count'] = 0
    for i in range(10):
        t = MyThread(str(i), mutex, arg)
        t.start()
    while True:
        if arg.get('count', 0) >= 10:
            break
        time.sleep(0.5)
    print("end and exit")

if "__main__" == __name__:
    test_thread()