我试图让两个函数同时运行。

1

2

3

4

5

6

7

8def func1():

print 'Working'

def func2():

print 'Working'

func1()

func2()

有人知道怎么做吗?

python的可能副本:如何并行运行python函数?

执行此操作:

1

2

3

4

5

6

7

8

9

10

11from threading import Thread

def func1():

print 'Working'

def func2():

print 'Working'

if __name__ == '__main__':

Thread(target = func1).start()

Thread(target = func2).start()

他可能想知道,由于全局解释器锁的存在,即使有问题的机器有多个CPU,它们也不会同时执行。wiki.python.org/moin/globalinterpreterlock网站

@Joaquin——你的权利,抱歉,在复制粘贴之后忘记了删除函数执行。

这个叉子炸毁了我的系统。

当函数返回某些内容时,如何获取结果?

没有理由使用两个import语句。只用第二个。

如何为函数提供参数?

关于线程处理的答案是好的,但是您需要对您想要做的事情更加具体一点。

如果您有两个同时使用大量CPU的函数,线程(在cpython中)可能会使您无处可逃。然后,您可能希望了解多处理模块,或者可能希望使用Jython/Ironpython。

如果CPU限制的性能是原因,那么您甚至可以在(非线程的)C中实现一些东西,并且比在Python中执行两个并行的东西更快。

如果没有更多的信息,很难找到一个好的答案。

一个选项,看起来它可以使两个函数同时运行时间,是使用threading模块(本答案中的示例)。

但是,作为正式的python文档,它有一点延迟页面描述。一个更好的尝试使用的模块是multiprocessing。

另外,还有其他的python模块可以用于异步执行(两段代码同时工作)。有关它们的一些信息以及选择它们的帮助,您可以阅读这个堆栈溢出问题。其他用户对threading模块的评论

He might want to know that because of the Global Interpreter Lock

they will not execute at the exact same time even if the machine in

question has multiple CPUs. wiki.python.org/moin/GlobalInterpreterLock

—乔纳斯·埃尔夫斯特?2010年6月2日11:39引用有关threading模块不工作的文档

CPython implementation detail: In CPython, due to the Global Interpreter

Lock, only one thread can execute Python code at once (even though

certain performance-oriented libraries might overcome this limitation).

If you want your application to make better use of the computational resources of multi-core machines, you are advised to use multiprocessing or concurrent.futures.ProcessPoolExecutor.

However, threading is still an appropriate model if you

want to run multiple I/O-bound tasks simultaneously.

我在每个print()函数的末尾附加time.time(),并在另一个答案的代码上将循环限制为9次。我在我的终端看到的是:(‘A’,1509314761.857559)(‘A’,1509314761.857664)(‘A’,1509314761.85767)(‘A’,1509314761.857675)(‘A’,15093147661.85768)(‘A’,1509314761.857685)(‘A’,1509314761.857685)(‘A’,1509314761.85769)(‘A’,1509314761.8593147661.857561.857559)(‘A’,1509314761.1509314761.859314761.857664.857664)(‘A’,15093149314761.1509314761.859314761.8576('B',1509314761.858229)('B',1509314761.858234)('B',1509314761.858239)('B',1509314761.858244)('B',1509314761.858249)('B',1509314761.858253)('B',1509314761.858258)

即使使用多处理,它也不是真正的并发仪式?一个接着一个跑。

@weeffwqg3检查我的答案中有关模块详细信息的链接。你也可以自己检查,但是官方文件应该解释。

这可以通过Ray优雅地完成,该系统允许您轻松地并行和分发您的Python代码。

要使您的示例并行,您需要使用@ray.remote decorator定义函数,然后使用.remote调用它们。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16import ray

ray.init()

# Define functions you want to execute in parallel using

# the ray.remote decorator.

@ray.remote

def func1():

print("Working")

@ray.remote

def func2():

print("Working")

# Execute func1 and func2 in parallel.

ray.get([func1.remote(), func2.remote()])

如果func1()和func2()返回结果,则需要稍微重写上述代码,方法是将ray.get([func1.remote(), func2.remote()])替换为:

1

2

3ret_id1 = func1.remote()

ret_id2 = func1.remote()

ret1, ret2 = ray.get([ret_id1, ret_id2])

与多处理模块或使用多线程相比,使用Ray有许多优点。特别是,相同的代码将在一台机器以及一组机器上运行。

有关Ray的更多优点,请参阅相关文章。

试试这个

1

2

3

4

5

6

7

8

9

10

11

12from threading import Thread

def fun1():

print("Working1")

def fun2():

print("Working2")

t1 = Thread(target=fun1)

t2 = Thread(target=fun2)

t1.start()

t2.start()

增加一个洞察如何解决OP的需求

我认为你试图传达的信息可以通过多重处理来实现。但是,如果您想通过线程来完成它,您可以这样做。这可能有帮助

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15from threading import Thread

import time

def func1():

print 'Working'

time.sleep(2)

def func2():

print 'Working'

time.sleep(2)

th = Thread(target=func1)

th.start()

th1=Thread(target=func2)

th1.start()

与多进程不同,线程模块同时工作,但时间有点偏。下面的代码打印一个"1"和一个"2"。它们分别由不同的函数调用。我确实注意到,当打印到控制台时,它们的时间会略有不同。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18from threading import Thread

def one():

while(1 == num):

print("1")

time.sleep(2)

def two():

while(1 == num):

print("2")

time.sleep(2)

p1 = Thread(target = one)

p2 = Thread(target = two)

p1.start()

p2.start()

输出:(请注意,该空间用于打印之间的等待)

1

2

3

4

5

6

7

8

9

10

11

12

13

141

2

2

1

12

21

12

1

2

不确定是否有办法纠正这个问题,或者它是否重要。只是我注意到的。

python如何同时运行两个函数_关于python:使2个函数同时运行相关推荐

  1. python形参中传入两个实参_认识Python函数的两个概念:形参与实参(16)

    我们先用Python编写一个比较两个数字大小的函数pMax(). def pMax(a,b): '''比较两个数字的大小,并返回较大的数字''' if a < b: print("{0 ...

  2. python怎样连续输入两个数字_在python中生成连续的数字,同时输入不变

    显而易见的是将give变成一个对象而不是一个函数.*任何对象都可以通过定义^{}方法来调用.在 当我们在做的时候,你的代码可以简化很多,所以让我们这样做吧.在class Giver(object): ...

  3. 数据库创建函数_达梦数据库创建UUID函数

    数据库创建函数_达梦数据库创建UUID函数 接触达梦数据库有一段时间了,整理了一些资料,今天分享一下达梦数据UUID自定义函数 UUID函数定义 很多数据库都有提供UUID函数,可是接触达梦数据库后, ...

  4. python一些常用函数_【python】常用的一些内置函数

    1.cmp cmp(A,B)函数,比较A,B的大小,如果A大于B,返回1,A小于B返回-1,A等于B返回0 print cmp(12,33) >>>-1 print cmp(&quo ...

  5. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  6. python deepcopy函数_用Python解数独[6]:递归获得最终答案

    目录 用Python解数独[0] 用Python解数独[1]:求每个单元格的行值域 用Python解数独[2]:求列值域和九宫格值域 用Python解数独[3]:求总值域 用Python解数独[4]: ...

  7. python强制结束函数_为什么Python没有 main 函数?终于有人给出了正确答案!

    毫无疑问,Python中没有所谓的 main 入口函数,但在网上经常有文章提到"Python中的main函数"和"建议编写main函数"等. 他们的目的可能是模 ...

  8. python isalnum函数_探究Python中isalnum()方法的使用

    探究Python中isalnum()方法的使用 isalnum()方法检查判断字符串是否包含字母数字字符. 语法 以下是isalnum()方法的语法: str.isa1num() 参数 NA 返回值 ...

  9. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  10. python闭包两种写法_浅析Python闭包

    一.什么是闭包python 在介绍闭包概念前,咱们先来看一段简短的代码数组 def sum_calc(*args):defwrapper(): sum=0for n inargs: sum+=n;re ...

最新文章

  1. 2.easyui 控件取值方式
  2. Visual Studio 2005常用插件搜罗
  3. matlab中隐含层缺省函数,Matlab双隐层的BP神经网络该如何创建
  4. 停车30分钟内不收费,程序员远程操控挪车,实现自动免费停车...
  5. 基于CMSIS创建典型STM32F4工程
  6. PMCAFF | 聊聊阅读类app的交互
  7. java线索二叉树的实现_JAVA递归实现线索化二叉树
  8. C++智能指针 shared_ptr、weak_ptr
  9. 个人Typech情侣主题Cupid模板
  10. C3P0连接池详细配置
  11. Windows学习总结(13)——各品牌电脑进入BIOS按键汇总
  12. c++多线程中detach的使用隐患
  13. vue相关插件及框架全家桶
  14. MTK7620A FLASH W25Q256学习
  15. 基础篇——树莓派通用引脚定义
  16. 基于libVLC的视频播放器之五:抽帧
  17. [密码学复习]Cryptography
  18. django如何连接Mysql中已有的数据库
  19. poj1066 Jugs
  20. Zabbix 配置钉钉告警

热门文章

  1. 2015年3季度基金持股超流通股30%的个股一览
  2. Qgis教程14:在QGS中添加自定义的Mapbox底图
  3. php7.1以上 mcrypt_generic_open is deprecated 报错处理
  4. 图像分割-种子区域生长
  5. 【视频理解】论文串讲
  6. Day-1 货仓选址(绝对值不等式)
  7. 隐马尔科夫模型(HMM)理解与总结
  8. Suspicious Package for Mac(pkg程序查看工具)
  9. 大三了,软件工程专业女生能走哪个方向呢?
  10. 【BOOST C++字串专题11】Boost.Spirit(三)