我想在类中实例中使用全局变量队列,我创建的队列mybuffer作为全局变量,然后Producer和Consume两个类的实例中使用这个全局变量,实际在windows的cmd中的的执行情况是class Producer中的的queue.put()一直在执行,但是class Consumer中的get()确一直没有得到队列中的元素,感觉这个mybuffer到两个类中变成了局部变量。
如果我把mybuffer队列做为成员变量分别传到两个类的实例中是可以正常的put()和get()
不知道全局变量的队列在类里面却不能用了。。。。。。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Process, Semaphore, Lock, Queue
import time
mybuffer = Queue(10)
class Consumer(Process):
def __init__(self,lock):
Process.__init__(self)
self.lock = lock
def run(self):
global mybuffer
while True:
mybuffer.get()
self.lock.acquire()
print('Consumer pop an element')
self.lock.release()
time.sleep(1)
class Producer(Process):
def __init__(self,lock):
Process.__init__(self)
self.lock = lock
def run(self):
global mybuffer
while True:
mybuffer.put('1')
self.lock.acquire()
print('Producer append an element')
self.lock.release()
time.sleep(1)
if __name__ == '__main__':
#mybuffer = Queue(10)
lock = Lock()
p = Producer(lock)
c = Consumer(lock)
c.start()
p.start()
p.join()
c.join()
print 'Ended!'
Kod di atas adalah betul apabila saya melaksanakannya di bawah macOS.
Adakah ini salah Windows?
Saya ingat bahawa tingkap tidak menyokong garpu dan tingkap menyerupai garpu. Apa yang lebih pelik ialah apabila tetingkap mencipta proses baharu, ia akan mengimport fail yang menciptanya (lihat jawapan lain https://segmentfault.com/q/10... untuk butiran). Dan anda membuat baris gilir pada permulaan fail. Apabila kedua-dua Pengeluar dan Pengguna diimport masuk, mereka masing-masing mencipta pembolehubah yang dipanggil mybuffer?
Sepatutnya inilah sebabnya.
Dalam tingkap, saya mencetak ID (mybuffer) masing-masing dalam Pelanggan dan Produk, dan ia berbeza.
Saya tidak tahu apa yang betul atau salah, saya harap ia membantu.