在Python中使用multiprocessing
模块时,是否有办法阻止在一段时间内切换到另一个进程的过程?
我有大约50个不同的子进程生成来从数据库中检索数据(每个进程= DB中的每个表),在查询和过滤数据后,我尝试将输出写入excel文件。
由于所有进程都有类似的步骤,所以它们都会在相似的时间结束写入过程,当然,因为我写入单个文件,所以我有一个阻止多个进程写入文件的锁。
问题是,写作过程似乎需要很长时间,与写入过程相比,当我在一个过程中写入相同数量的数据时(至少慢了x10)
我猜其中一个原因可能是在编写时,cpu会不断切换到其他进程,这些进程全部停留在互斥锁上,只返回到唯一一个处于活动状态的进程。我猜测上下文切换是一个很大的浪费时间,因为有很多进程来回切换
我想知道是否有办法锁定进程,以便对于代码的某个部分,进程之间不会发生上下文切换
或其他任何加快此过程的建议?
答案 0 :(得分:1)
不要使用锁定,也不要从多个进程写入;让子进程将输出返回给父进程(例如通过标准输出),让它等待进程join
读取它。我不是multiprocessing
API上的100%,但你可以让父进程休眠并等待SIGCHLD
,然后才能从已退出的子标准输出中读取数据,并将其写入您的输出文件。
这样只有一个进程正在写入文件,并且您不需要任何繁忙的循环或其他任何操作。它会更简单,更有效率。
答案 1 :(得分:0)
您可以提高流程的优先级(转到任务管理器,右键单击流程并提高流程优先级)。然而,无论如何操作系统都将进行上下文切换,您的流程对操作系统的其他流程没有更好的声明。