Skip to main content
 首页 » 编程设计

Python overgiving变量从一个线程到另一个多线程

2024年11月01日31telwanggs

如何在这个多线程 Szenario 中将变量从 _While.py 赋给 __scheduler.py? 我尝试了很多东西,但似乎没有任何效果。

线程.py

from multiprocessing import Process 
import _While 
import _Scheduler 
 
if __name__ == '__main__': 
    p1 = Process(target=_While.main) 
    p1.start() 
    p2 = Process(target=_Scheduler.main) 
    p2.start() 

_While.py

import time 
def main(): 
 
    while True: 
        print "while" 
        time.sleep(0.5) 
        """getting button status""" 
        """giving button status to _Scheudler._scheduler""" 

__Scheduler.py

import logging 
import time 
from apscheduler.scheduler import Scheduler 
from _While import """button status""" 
 
def _scheduler(): 
    print "scheduler" 
 
    while """button status"""==True: 
        print "Button is pressed" 
        time.sleep(0.5) 
 
 
def main(): 
    logging.basicConfig() 
    scheduler = Scheduler(standalone=True) 
    scheduler.add_interval_job(_scheduler, seconds=2) 
    scheduler.start() 
 
if __name__ == '__main__': 
    main() 

解决方法:

线程.py

from multiprocessing import Process, Value, Array 
import time 
import _While 
import _Scheduler 
 
if __name__ == '__main__': 
 
    num = Value('d', 0.0) 
    arr = Array('i', range(10)) 
 
    p1 = Process(target=_While.main, args=(num, arr)) 
    p1.start() 
    p2 = Process(target=_Scheduler.main, args=(num, arr)) 
    p2.start() 
    p1.join() 
    p2.join() 
 
    print num.value 

_While

import time 
def main(num, arr): 
    while True: 
        print "while" 
        num.value = 1 
        time.sleep(10) 
        """getting button status""" 
        """giving button status to _Scheudler._scheduler""" 

__Scheduler.py

import logging 
from apscheduler.scheduler import Scheduler 
 
def _scheduler(num, arr): 
    while True: 
        print num.value 
        if num.value == 1: 
            print "mongo" 
            num.value = 0 
            break 
 
def main(num, arr): 
    logging.basicConfig() 
    scheduler = Scheduler(standalone=True) 
    scheduler.add_interval_job(_scheduler, args=(num, arr), seconds=2) 
    scheduler.start() 
 
if __name__ == '__main__': 
    main() 

剩下的唯一问题是我不能在不使用 Array 的情况下使用 Value

请您参考如下方法:

在创建 p1 和 p2 之前在 Threads.py 中创建一个 multiprocessing.Value 的实例,然后将 Value 的实例作为参数传递给 p1 和 p2,并更改 _While.py 和 _Scheduler.py 的 main() 方法接受新的值参数。

类似于此处的操作http://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

您也可以按照 Euegene C 的建议使用队列或管道。可以在此处找到示例 http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes