python - python中的出列函数

标签 python multithreading queue

我正在使用线程。一个线程作为生产者线程,另一个线程作为消费者线程。线程从同一个队列 (q1) 入队和出队。生产者功能似乎工作正常。但是,消费者线程(出队函数)给我错误。下面是我的代码

def PacketProducer(Threadnum, numTicks, onProb, offProb, q):
   l=0
   onState = True
   packetId = 0
   for i in range(numTicks):
      x = generator(onProb, offProb, 'OnOff', onState)
      if(x==True):
            onState = True
            pkt = packet
            pkt.srcID = Threadnum
            pkt.pktId = packetId
            q.put(pkt)
            print(pkt.pktId, ' ', pkt.srcID)
            l = l+1
            packetId = packetId + 1
        else:
            onState = False
        time.sleep(1)
    #print(x)
    print(l/numTicks, ' threadNum', Threadnum)
    return

def PacketConsumer(q):  #dequeues and enqueues and returns the packet
    while True:
        if not q.empty():
            pkt = q.get()
            print('dequeuing Packet', ' ', pkt.pktId, pkt.srcID)
            time.sleep(1)
    return
if __name__ == '__main__':
    numTicks = 40
    q1 = Queue()
    pkt = packet
    x = threading.Thread(target=PacketProducer, args=(1, numTicks, 0.7, 0.7, q1))
    #y = threading.Thread(target=PacketProducer, args=(2, numTicks, 0.6, 0.4, q1))
    t = threading.Thread(target=PacketConsumer, args=(q1))
    t.start()
    x.start()
    #y.start()
    x.join()
#    y.join()
    t.join()

它给了我以下错误:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Users\Syed\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\Users\Syed\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
TypeError: PacketConsumer() argument after * must be an iterable, not Queue

最佳答案

单项元组中必须有,来区分,否则就是分组括号。

改变这一行:

t = threading.Thread(target=PacketConsumer, args=(q1,))

关于python - python中的出列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087731/

相关文章:

python - 添加一个数字到指定索引范围内的列表

python pygame 在屏幕上以 blit sprite.Group() 的不同方式

c++ - Win32 C++ 中的无锁双端队列

c++ - 我们如何在 C++ 实现文件中包含结构?

java - 使用 BlockingQueue 时 Runnable 不会停止

java - Queue#offer() 应该优先于 Queue#add() 吗?为什么?

python - 在Python中检查二维数组中的所有元素是否都等于1

Python TEA 实现

android - 具有 singleInstance launchMode 和新线程的 Activity

安卓线程 : is it necessary to wait for threads to start before "join"ing them?