当前位置: 首页 > 面试题库 >

Python多线程打印语句被延迟,直到所有线程完成执行

狄卓君
2023-03-14
问题内容

我下面有一段代码,该代码创建了几个线程来执行任务,而单独运行效果很好。但是,我很难理解为什么在所有线程完成并print 'finished'调用该语句之前,我在函数中调用的打印语句不会执行。我希望它们在线程执行时被调用。有没有简单的方法可以做到这一点,为什么首先要这样做呢?

def func(param):
    time.sleep(.25)
    print param*2

if __name__ == '__main__':
    print 'starting execution'
    launchTime = time.clock()
    params = range(10)
    pool=multiprocessing.Pool(processes=100) #use N processes to download the data
    _=pool.map(func,params)
    print 'finished'

问题答案:

这是由于stdout缓冲引起的。您仍然可以刷新缓冲区:

import sys

print 'starting'
sys.stdout.flush()

您可以在此处和此处找到有关此问题的更多信息。



 类似资料:
  • 这可能是在类似的背景下问的,但我在搜索了大约20分钟后找不到答案,所以我会问。 我已经编写了一个Python脚本(比如说:scriptA.py)和一个脚本(比如说scriptB.py) 在scriptB中,我想用不同的参数多次调用scriptA,每次运行大约需要一个小时,(这是一个巨大的脚本,做了很多事情……不用担心),我希望能够同时使用所有不同的参数运行scriptA,但我需要等到所有参数都完成

  • 问题内容: 我有一个应用程序,在某些情况下需要计算某些次数。此计算功能具有@Async注释(来自Spring Framework),可以在4个线程上运行这些计算。问题是我需要大约40000个这些计算,并且我想知道所有计算的开始和结束之间的时间,因此我看到在调用计算函数的for循环之前和之后的时间是什么。但是现在所有计算都放入队列中,因此for循环立即完成,时间大约为1秒,而计算要花几个小时才能完成

  • 我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,

  • 我有一个python脚本,所以我在python中使用线程模块并发执行。 def run(self):db=MySQLdb。connect('localhost','mytable','user','mytable')游标=db。cursor()query=“dig short”str(反向ip)”按键try:output=子进程。检查\u输出(查询,shell=True)输出\u编辑=输出。条带(

  • 本文向大家介绍详解Python 多线程 Timer定时器/延迟执行、Event事件,包括了详解Python 多线程 Timer定时器/延迟执行、Event事件的使用技巧和注意事项,需要的朋友参考一下 Timer继承子Thread类,是Thread的子类,也是线程类,具有线程的能力和特征。这个类用来定义多久执行一个函数。 它的实例是能够延迟执行目标函数的线程,在真正执行目标函数之前,都可以cance

  • 我打算在主线程中启动2个线程,主线程应该等到所有2个子线程完成,我就是这样做的。 在上面的代码中,确实让主线程等待子线程,但问题是,在第一个线程完成之前不会创建第二个线程。这不是我想要的。 我想要的是,这两个线程立即在主线程中创建,然后主线程等待它们完成。似乎做不到,是吗? 我想,也许我可以通过一个信号灯来完成这项工作,但还有别的方法吗?