如何解决我如何使用多处理在 python 中共享列表
我正在尝试对列表进行共享访问,每次按热键“q”时,我都想追加并获得与进程a相同的结果strong> ['something'] 每次我按下,但过程 b 的输出是 [] 而不是 ['something'] 等。
from multiprocessing import Process
from pynput import keyboard
from time import sleep
list1 = list()
def on_press(key):
if str(key).replace("'",'') == 'q':
list1.append('something')
print(f'process a: {list1}')
def keysinput():
global listener
while True:
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
def printsharedlist():
while True:
print(f'process b: {list1}')
sleep(3)
if __name__ == '__main__':
a = Process(target=keysinput)
a.start()
b = Process(target=printsharedlist)
b.start()
按“q”后输出
process a: []
process b: ['something']
按“q”后预期
process a: ['something']
process b: ['something']
解决方法
我找到了一个方法:
from multiprocessing import Manager,Process
from pynput import keyboard
from time import sleep
def on_press(key):
global listreturn
if str(key).replace("'",'') == 'q':
print(key)
listreturn = 'something'
return listener.stop()
def keysinput(list2):
global listener
while True:
print(f'process a: {list2}')
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
list2.append(listreturn)
def printsharedlist(list2):
while True:
print(f'process b: {list2}')
sleep(3)
if __name__ == '__main__':
manager = Manager()
list1 = manager.list()
a = Process(target=keysinput,args=(list1,))
b = Process(target=printsharedlist,))
a.start()
b.start()
a.join()
b.join()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。