吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 455|回复: 10
收起左侧

[求助] python多线程的join

[复制链接]
pythonhnm 发表于 2024-1-3 17:16
最近写东西有个问题,如果有多个子线程,而主线程要等所有子线程结束接着执行,这个该咋实现?
据我所知join方法好像会把主线程启动后面子线程的代码也堵塞掉

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

Robertshuai 发表于 2024-1-3 17:23
使用线程池,把子线程丢进去
[Python] 纯文本查看 复制代码
 threadPool = ThreadPoolExecutor(max_workers=3, thread_name_prefix="test_")
  
for user in lines:
        threadPool.submit(method)
 楼主| pythonhnm 发表于 2024-1-3 17:35
Robertshuai 发表于 2024-1-3 17:23
使用线程池,把子线程丢进去
[mw_shl_code=python,true] threadPool = ThreadPoolExecutor(max_workers=3, ...

method是子线程对象吗
redballoon 发表于 2024-1-3 18:06
本帖最后由 redballoon 于 2024-1-3 18:35 编辑
pythonhnm 发表于 2024-1-3 17:35
method是子线程对象吗

method是你要做事的函数调用,还有submit方法不如map好用
亮哥vvv 发表于 2024-1-3 18:13
[Python] 纯文本查看 复制代码
import threading

def fun(num):
    print(f'{num} is over!')

if __name__ == "__main__":
    for i in range(1, 5):
        p = threading.Thread(target=fun, args=(i,))
        p.start()
        p.join()
        
    print("begin to do some things")


是这意思吗
 楼主| pythonhnm 发表于 2024-1-3 18:37
亮哥vvv 发表于 2024-1-3 18:13
[mw_shl_code=python,true]import threading

def fun(num):

这样的话会堵塞for循环吧?
亮哥vvv 发表于 2024-1-4 09:49
pythonhnm 发表于 2024-1-3 18:37
这样的话会堵塞for循环吧?

[Python] 纯文本查看 复制代码
import threading

def fun(num):
    print(f'{num} is over!')

if __name__ == "__main__":
    threads = []
    for i in range(1, 5):
        p = threading.Thread(target=fun, args=(i,))
        p.start()
        threads.append(p)
    
    for thread in threads:
        thread.join()
        
    print("begin to do some things")


这样
 楼主| pythonhnm 发表于 2024-1-4 13:15
亮哥vvv 发表于 2024-1-4 09:49
[mw_shl_code=python,true]import threading

def fun(num):

for thread in threads:
        thread.join()
这里会把后面的join也堵塞掉吧?
亮哥vvv 发表于 2024-1-4 15:37
本帖最后由 亮哥vvv 于 2024-1-4 17:27 编辑
pythonhnm 发表于 2024-1-4 13:15
for thread in threads:
        thread.join()
这里会把后面的join也堵塞掉吧?

没关系呀 线程已经跑起来了 join 的 时候 线程会有两种情况 要么正在跑 要么跑完了 for 循环的时候 要么相应的线程跑完了 直接下一个线程的 join  要么没跑完 阻塞住主线程 等待它完 但此时不会影响其它线程的执行  这个线程完了 还是 判下一个线程 所有线程都执行完了其 join 也就是 所有线程都执行完了  再执行主线程
 楼主| pythonhnm 发表于 2024-1-4 16:47
亮哥vvv 发表于 2024-1-4 15:37
没关系呀 线程已经跑起来了 json 的 时候 线程会有两种情况 要么正在跑 要么跑完了 for 循环的时候 要么 ...

好的,谢谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-4 04:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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