Python 是否可以同时执行两个函数

Python 是否可以同时执行两个函数,python,multithreading,parallel-processing,multiprocessing,Python,Multithreading,Parallel Processing,Multiprocessing,我想在同一时间(或尽可能近的距离)从两个不同的相机拍摄照片 如果我使用多线程或多处理,它仍然会连续运行线程/进程。。例如,如果我启动以下过程: Take_photo_1.start() Take_photo_2.start() 虽然这些进程将并行运行,但启动进程的命令仍按顺序执行。有什么方法可以同时执行这两个进程吗?即使直接用机器代码编写,也无法做到这一点。即使所有线程都在内核屏障上等待,这种等待也会在不同的内核上花费不同的时间,而且屏障等待和摄像头获取之间需要处理的操作码必须在缓存可能处于不

我想在同一时间(或尽可能近的距离)从两个不同的相机拍摄照片

如果我使用多线程或多处理,它仍然会连续运行线程/进程。。例如,如果我启动以下过程:

Take_photo_1.start()
Take_photo_2.start()

虽然这些进程将并行运行,但启动进程的命令仍按顺序执行。有什么方法可以同时执行这两个进程吗?

即使直接用机器代码编写,也无法做到这一点。即使所有线程都在内核屏障上等待,这种等待也会在不同的内核上花费不同的时间,而且屏障等待和摄像头获取之间需要处理的操作码必须在缓存可能处于不同状态的系统上获取和运行,没有什么能阻止操作系统从其中一个线程窃取CPU来运行一些完全无关的代码,而摄像头的I/O(即使它可能不是序列化的)可能也不能保证静态时间,等等

当你把一种解释语言放在上面(特别是一种带有GIL的语言,比如Python,这意味着屏障等待和摄像头get之间的字节码不能并行运行)……好吧,你并没有真正改变任何东西;“不可能*7”仍然是“不可能”。但你让它变得更加明显

幸运的是,现实生活中很少有像这样的真正的硬实时需求。相反,你有一个要求,比如“99.9%的时间里,所有相机拍摄都应该在期望的精确30fps的+/-4ms内进行”。或者,“90%的时间在+/-1ms内,99.9%的时间在+/-4ms内,99.999%的时间在+/-20ms内,只要你不做任何愚蠢的事情,比如在运行代码时更改笔记本电脑的电源状态”

或者……好吧,只有你知道你为什么想要“精确”,并且能找出满足你的实际需求是什么

在这种情况下,通常最简单的方法是以显而易见的方式编写代码,进行彻底的压力测试,看看它是否满足您的需求,并找出只有在不满足的情况下才能优化的方法

因此,您现有的代码可能很好

如果没有,您可能只需要添加一个共享的
barrier=threading.barrier()
并在
camera.get()前面执行一个
barrier.wait()

您可能需要添加逻辑来检测计时器延迟并重新同步(您可以在每个线程中独立执行此操作,或者让任何一个线程先计算它,然后让其他所有线程在屏障处等待)

您可能需要在C语言中重写核心循环,或者转储您正在使用的具有更好实时性保证(如QNX)的操作系统。或者完全扔掉操作系统,这样就没有调度程序来阻挡了。或者扔掉复杂的超标量CPU,将整个过程实现为一个硬件状态机。或者


但是,假设您首先有合理的要求,通常不必走得太远。

是(对于“尽可能接近”的小值).对于相机,传统上你会使用某种触发系统,但使用你的模型,你可以有一个共享变量来注册回调,或者让它们在循环中检查墙时间。这取决于“精确”的分辨率“您预计,在接收到(比如)一条命令后,让Arduino以电子方式同时在硬件中激活两个电缆释放相对容易,您可以通过USB电缆从控制PC串行发送到Arduino。这非常有帮助。谢谢你的详细解释。