pythonhnm 发表于 2024-1-3 17:16

python多线程的join

最近写东西有个问题,如果有多个子线程,而主线程要等所有子线程结束接着执行,这个该咋实现?
据我所知join方法好像会把主线程启动后面子线程的代码也堵塞掉

Robertshuai 发表于 2024-1-3 17:23

使用线程池,把子线程丢进去
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
使用线程池,把子线程丢进去
threadPool = ThreadPoolExecutor(max_workers=3, ...

method是子线程对象吗{:1_904:}

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

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
import threading

def fun(num):


这样的话会堵塞for循环吧?

亮哥vvv 发表于 2024-1-4 09:49

pythonhnm 发表于 2024-1-3 18:37
这样的话会堵塞for循环吧?

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
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 循环的时候 要么 ...

好的,谢谢!
页: [1] 2
查看完整版本: python多线程的join