如何在这个多线程 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
