吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 457|回复: 5
收起左侧

[学习记录] Python简单实现多线程例子

[复制链接]
baiping520 发表于 2024-6-7 12:21
使用Python实现多线程的例子,演示如何在主线程内分别启动ABC三个线程,并实现启动和停止指定线程的功能
[Python] 纯文本查看 复制代码
import threading
import time

# 定义一个全局标志,用于控制线程的运行状态
stop_thread_A = False
stop_thread_B = False
stop_thread_C = False

# 线程A的函数
def thread_A():
    while not stop_thread_A:
        print("Thread A is running")
        time.sleep(1)
    print("Thread A is stopped")

# 线程B的函数
def thread_B():
    while not stop_thread_B:
        print("Thread B is running")
        time.sleep(1)
    print("Thread B is stopped")

# 线程C的函数
def thread_C():
    while not stop_thread_C:
        print("Thread C is running")
        time.sleep(1)
    print("Thread C is stopped")

# 启动线程的函数
def start_threads():
    global thread_a, thread_b, thread_c

    # 创建线程
    thread_a = threading.Thread(target=thread_A)
    thread_b = threading.Thread(target=thread_B)
    thread_c = threading.Thread(target=thread_C)

    # 启动线程
    thread_a.start()
    thread_b.start()
    thread_c.start()

# 停止指定线程的函数
def stop_thread(thread_name):
    global stop_thread_A, stop_thread_B, stop_thread_C

    if thread_name == 'A':
        stop_thread_A = True
    elif thread_name == 'B':
        stop_thread_B = True
    elif thread_name == 'C':
        stop_thread_C = True

if __name__ == "__main__":
    # 启动ABC三个线程
    start_threads()

    # 主线程等待5秒
    time.sleep(5)

    # 停止线程A
    stop_thread('A')

    # 主线程等待5秒
    time.sleep(5)

    # 停止线程B和C
    stop_thread('B')
    stop_thread('C')

    # 确保所有线程已经停止
    thread_a.join()
    thread_b.join()
    thread_c.join()

    print("All threads have been stopped")


注意事项
  • 线程安全:在多线程编程中,访问和修改共享资源时要小心,以避免竞态条件和数据不一致问题。使用锁(Lock)可以确保线程安全。
  • 停止线程的方式:使用标志变量来控制线程的停止是一个常见的方法,避免使用强制终止线程的方法(如threading.Thread的terminate()),因为这可能会导致资源未正确释放等问题。
  • 线程的生命周期:确保主线程在退出前等待所有子线程结束,使用join()方法可以确保这一点。

这个示例展示了如何使用Python的threading模块来启动和停止线程,并解释了相关的注意事项和代码细节。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
HalaTest + 1 + 1 加油,我看好你哦

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tianmenghuan 发表于 2024-6-7 18:23
你这生成 一个可运行程序 更直观 更好些
mmm8wwwwww 发表于 2024-6-7 19:22
zetakxuan 发表于 2024-7-4 22:59
我在弄多线程的时候,两个Url然后对应两个apikey 但是在运行的时候显示我key错误,我不知道哪里出问题了,因为我两个参数都是设置的不一样的,不知道能不能给我一个示例,对应2个url通过两个不同的apikey查询同一个输入参数条件?
firesix 发表于 2024-7-5 10:18
可以使用
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
firesix 发表于 2024-7-5 10:22
zetakxuan 发表于 2024-7-4 22:59
我在弄多线程的时候,两个Url然后对应两个apikey 但是在运行的时候显示我key错误,我不知道哪里出问题了, ...

# 初始化线程池,最大线程数为3
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:  
    # 创建一个Future对象的列表来保存提交的任务  
    futures = []
    # 循环执行的任务
    for user in userList:
        # workMain 任务方法 user 任务参数
        future = executor.submit(workMain, user)
        futures.append(future)
   
    # 等待所有任务完成  
    for future in concurrent.futures.as_completed(futures):
        try:
            index = futures.index(future)
            # logger是封装
            logger.info("第{}个任务完成".format(index+1))
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表