Python多个循环同时进行

时间:2014-01-10 13:08:13

标签: python loops

我知道在Python中不可能同时运行多个循环。 无论如何,我需要实现的是我有一个循环运行读取传感器数据的负载,每0.25秒。 同时,我有并行运行的信号设备需要每3秒发送一次信号。 我的问题是实现这一目标的最佳做法是什么?

编写两个脚本并并行运行它们是否有意义? 使用线程是否有意义? 为了使这项工作还有其他可能吗?

我会很高兴代码样本。

谢谢!

编辑: 两个循环都是绝对独立的。 因此,假设当脚本1正在运行时,读取传感器数据,当其中一个传感器接收到值<1时。 300,它应该运行脚本2,它将发送信号。在传感器数据获得的同时, 300它应该停止脚本2。

2 个答案:

答案 0 :(得分:6)

“Python同时进行多个循环。我知道这是不可能的[...]” - 这看起来很有趣。

可以同时运行两个循环,正如您所描述的那样。这两种方式都很有意义,取决于你实际需要和想要的东西。如果任务完全独立,则应将其作为两个脚本运行。如果你需要这两个循环来实现一个任务,并且它们在一个文件中是有意义的,你可以使用multiprocessing

测试python 2.7.5+和3.3.2 +。

以下是一些最小的例子:

from multiprocessing import Process
import time

def f(name):
    print('hello', name)
    time.sleep(10)

def d(name):
    print('test2', name)
    time.sleep(10)

if __name__ == '__main__':
    p1 = Process(target=f, args=('bob',))
    p2 = Process(target=d, args=('alice',))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

脚本运行10秒,两个字符串立即打印,这意味着一切正常。

time python3 ./process.py 
hello bob
test2 alice

real  0m10.073s
user  0m0.040s
sys   0m0.016s

答案 1 :(得分:0)

也可以通过运行多个脚本和一些.pyw来方便并让它们通过UDP套接字交换信息。注释127.0.0.1是在任何情况下发送给您自己。同样对于端口,只需确保没有其他程序使用您使用的端口。和其他程序一样,我的意思是任何使用端口甚至基本路由器设置的程序。

示例(发送)

import os
from sockets import *
host = "ip"
port = "9000"
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
data = "Random Text"
send = data.encode("ascii")
UDPSock.sendto(send, addr)
UDPSock.close()

样本(接收)

import os
from socket import *
host = ""
port = 9000
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(addr)
(data, addr) = UDPSock.recvfrom(1024)#1024 is MAX bytes to receive
data = data.decode('ascii')
UDPSock.close()

您可以使用它们来运行单独的循环,并从两个单独的程序中告诉您该怎么做。