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

Python:如何并行运行python函数?

东郭弘方
2023-03-14
问题内容

我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。

我有这样的事情:

files.py

import common #common is a util class that handles all the IO stuff

dir1 = 'C:\folder1'
dir2 = 'C:\folder2'
filename = 'test.txt'
addFiles = [25, 5, 15, 35, 45, 25, 5, 15, 35, 45]

def func1():
   c = common.Common()
   for i in range(len(addFiles)):
       c.createFiles(addFiles[i], filename, dir1)
       c.getFiles(dir1)
       time.sleep(10)
       c.removeFiles(addFiles[i], dir1)
       c.getFiles(dir1)

def func2():
   c = common.Common()
   for i in range(len(addFiles)):
       c.createFiles(addFiles[i], filename, dir2)
       c.getFiles(dir2)
       time.sleep(10)
       c.removeFiles(addFiles[i], dir2)
       c.getFiles(dir2)

我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作:

process.py

from files import func1, func2

runBothFunc(func1(), func2())

我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。


问题答案:

你可以使用threading或multiprocessing。

由于CPython的特殊性,threading不太可能实现真正的并行性。因此,multiprocessing通常是更好的选择。

这是一个完整的示例:

from multiprocessing import Process

def func1():
  print 'func1: starting'
  for i in xrange(10000000): pass
  print 'func1: finishing'

def func2():
  print 'func2: starting'
  for i in xrange(10000000): pass
  print 'func2: finishing'

if __name__ == '__main__':
  p1 = Process(target=func1)
  p1.start()
  p2 = Process(target=func2)
  p2.start()
  p1.join()
  p2.join()

可以按照以下方式轻松地将子进程的启动/联接机制封装为一个函数runBothFunc:

def runInParallel(*fns):
  proc = []
  for fn in fns:
    p = Process(target=fn)
    p.start()
    proc.append(p)
  for p in proc:
    p.join()

runInParallel(func1, func2)


 类似资料:
  • 问题内容: 我安装了Anaconda并可以运行Python,因此我假设我已正确安装了它。按照此介绍性文档,我尝试安装Python v3.3,因此将以下行复制并粘贴到控制台中: 但是,这给了我一个错误: 找不到命令 运行Conda我需要做什么? 我正在Linux系统上工作。 问题答案: 你可能想尝试一下: 对于anaconda 2: 对于anaconda 3: 对于anaconda 4: 使用Ana

  • 问题内容: 假设我有一台Koa Web服务器,其端点如下所示: 现在,在所有动作都明显执行之后,客户端将获得响应。但事情是每个动作都取决于前一个动作的完成。 有没有办法并行执行它们? 注意:除非我能以某种方式返回结果而不是resolve(),否则将它们变为Promises是不可行的。 问题答案: 将生成器功能转换为Promises,并异步执行它们。等待他们全部完成:

  • 我有一个python for循环,它执行一个bash脚本,如下所示(我将其简化为只包含需要显示的内容),我需要它在for循环中同时运行所有这些bash脚本,但要等到它们全部完成后才能继续串联。bash脚本是我唯一希望并行运行的部分。它是在同一for循环的下游做一些需要串联完成的事情。这可能吗? 以下是系列作品。没有脚本的并行执行,因为。如果我删除. etc(),它几乎立即出错,下游的任何东西都不再

  • 我正在试图理解如何为多个子进程构建并行计算管道。正如我所看到的,每个子进程块等待前一个代码块运行,而我有一个管道,它对前一个运行没有依赖关系,并且可以并行处理。我想知道这是不是可能的,如果是这样的话,一个示例语法来展示如何做到这一点将是一个很大的帮助!提前道谢。

  • 主要内容:Python 交互式编程,编写 Python 源文件Python 是一种解释型的脚本编程语言,这样的编程语言一般支持两种代码运行方式: 1) 交互式编程 在命令行窗口中直接输入代码,按下回车键就可以运行代码,并立即看到输出结果;执行完一行代码,你还可以继续输入下一行代码,再次回车并查看结果……整个过程就好像我们在和计算机对话,所以称为交互式编程。 2) 编写源文件 创建一个源文件,将所有代码放在源文件中,让解释器逐行读取并执行源文件中的代码,直到文

  • 问题内容: 所以我有点像Python,但是我遇到了问题……运行它。大声笑 我现在正在使用IDLE,但是它没有任何用处,因为一次只能运行几行。 我还使用Komodo Edit创建实际的.py文件。 我的问题是,如何运行.py文件来测试实际程序? 我正在使用Windows 7和Komodo Edit 5作为我的IDE。在Komodo中按F5根本不起作用。 问题答案: 我很高兴你问!我只是在Wikibo