从另一个进程启动一个进程时遇到问题



如果我做对了,Python 不接受从进程启动的进程?!例如:

def function1():
while True:
wait_for_condition
#then....
process2.start()
def function2():
does something
process2.join()
process1 = multiprocessing.Process(target=function1,))
process2 = multiprocessing.Process(target=function2,))
process1.start()

在我的测试中,python拒绝从进程中打开进程。

有没有另一种方法可以解决这个问题的解决方案?

如果没有 - Id 还有另一种方式,但这种方式将包括对电子设备的修改(将一个输出连接到一个输入,并使用它来让进程等待事件然后启动。但我认为这不是一种干净的方式。它更像是一种解决方法。如果输入和输出设置不正确,我会有一点风险导致快捷方式(。


编辑:
任务:
有三个进程并行。它们分别等待一个连接的传感器的输入。
如果其中一个进程获得输入更改,则应重置计数器 (LED_counter( 并在尚未启动的情况下启动另一个进程 (LED_process(。之后,进程再次等待输入更改。

除此之外...

LED_process开始激活一个输出并倒计时LED_counter。如果LED_counter达到零,则进程终止。如果代码再次启动,它必须能够从代码顶部重新启动。


编辑 2:

最新尝试线程(不要被一些德语单词混淆(。如果我尝试这段代码 ->不同的线程会以某种奇怪的方式混合在一起。但现在我找不到错误。具有多处理的相同代码工作正常:

import RPi.GPIO as GPIO
import time
import threading
import sys
LED_time = 10 #LEDs active time
#Sensor Inputs
SGT = 25
SGA = 23
SHT = 12
GPIO.setmode(GPIO.BCM)
GPIO.setup(SGT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SGA, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(SHT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def Sens_check(Sensor,Name):
print("Thread_{} aktiv".format(Name))
while True:
GPIO.wait_for_edge(Sensor, GPIO.FALLING)
#LcGT.value = LED_time   
print("{} Offen".format(Name))
time.sleep(0.1)
GPIO.wait_for_edge(SGT, GPIO.RISING)
print("{} Geschlossen".format(Name))
time.sleep(0.1)

SensGT_Thread = threading.Thread(
target=Sens_check,
args=(SGT,"Gartentor",))
SensGA_Thread = threading.Thread(
target=Sens_check,
args=(SGA,"Garage",))
SensHT_Thread = threading.Thread(
target=Sens_check,
args=(SHT,"Haustuere",))
try:
SensGT_Thread.start()
time.sleep(0.1)
SensGA_Thread.start()
time.sleep(0.1)
SensHT_Thread.start()
SensGT_Thread.join()
SensGA_Thread.join()
SensHT_Thread.join()
except:
print("FAILURE")
finally:
sys.exit(1)

进程只能在创建它们的进程中启动。在提供的代码中,process2是在主进程中创建的,但试图在另一个进程中启动(process1(。此外,进程无法重新启动,因此每次使用.start时都应创建它们。

下面是在流程中启动进程的示例:

import multiprocessing
import time

def function1():
print("Starting more processes")
sub_procs = [multiprocessing.Process(target=function2) for _ in range(5)]
for proc in sub_procs:
proc.start()
for proc in sub_procs:
proc.join()
print("Done with more processes")

def function2():
print("Doing work")
time.sleep(1)  # work
print("Done with work")

print("Starting one subprocess")
process1 = multiprocessing.Process(target=function1)
process1.start()
print("Moving on without joining")
"""Output of this:
Starting one subprocess
Moving on without joining
Starting more processes
Doing work
Doing work
Doing work
Doing work
Doing work
Done with work
Done with work
Done with work
Done with work
Done with work
Done with more processes
"""

相关内容

  • 没有找到相关文章

最新更新