2014-03-24 92 views
2

如何在此多線程Szenario中將變量從_While.py變爲__scheduler.py? 我試了很多東西,但似乎沒有工作。從一個線程到另一個多線程的Python overgiving變量

Thread.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() 

解決方案:

Thread.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() 

唯一剩下的問題是,我可以在不使用數組的情況下使用Value

+1

發現那不是多線程。您明確導入'multiprocessing'並啓動'Process'es而不是'Thread's。 – delnan

+1

你看過['multiprocessing.Value'](http://docs.python.org/2/library/multiprocessing.html#multiprocessing.Value)嗎? – Alec

+0

也有'經理'對象:http://docs.python.org/2/library/multiprocessing.html#managers – mgilson

回答

2

在創建p1和p2之前,在Threads.py中創建multiprocessing.Value的實例,然後將Value的實例作爲參數傳遞給p1和p2,並更改main()方法_While.py和_Scheduler.py接受新的Value參數。

如何通過Euegene C.的建議是這裏http://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

你也可以使用隊列或管道做過類似的例子可以在這裏http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes

+0

謝謝你,你做了我的一天。 – Lennard

相關問題