«Имя не определено» в Python

#python

#python

Вопрос:

Я новичок в программировании, и у меня проблема. Когда я запускаю код, он выдает ошибку:

Файл «main.py «, строка 29, в

      class workers:                                                                                                                                                                                                                              
  File "main.py", line 30, in workers                                                                                                                                                                                                           
    workers = deque()                                                                                                                                                                                                                           
 NameError: name 'deque' is not defined
 

Эта программа генерирует поток событий для tcp / udp, но просит объявить «deque ()», но я не знаю, как это сделать. Код на Python:

     def udp_worker(port):
        start = time.time()
        sock = socket.socket(socket.AF_INET,
                socket.SOCK_DGRAM)
        print('Begin sendding data to port %d' % port)
        retval = 0
        for i in range(0, MSG_AMOUNT):
            retval  = sock.sendto(MESSAGE_BASE % (i, port, randrange(100)), (UDP_IP, port))
        print('Total amount of data sent %d in time %s' % (retval, str(time.time() - start)))
    
    def tcp_worker(port):
        start = time.time()
        sock = socket.socket(socket.AF_INET,
                socket.SOCK_STREAM)
        sock.connect((UDP_IP, UDP_BASE_PORT))
        print('Begin sendding data to port %d' % port)
        for i in range(0, MSG_AMOUNT):
            sock.sendall(MESSAGE_BASE % (i, port, randrange(100)) )
            #data = sock.recv(1024)
        sock.close()
        print('Total in time %s' % str(time.time() - start))
    
    if __name__ == '__main__':
        import sys
        if len(sys.argv) > 1:
            MSG_AMOUNT = int(sys.argv[1])
        if len(sys.argv) > 2:
            PROCESS = int(sys.argv[2])
    
        workers = deque()
        for i in range(0, PROCESS):
            port = UDP_BASE_PORT
            #t = threading.Thread(target = udp_worker, args = [port])   # comments this for testing tcp only
            t = threading.Thread(target = tcp_worker, args = [port])
            t.start()
            print("%s start" % t)
            workers.append(t)
        for w in workers:
            print("%s wait for join" % w)
            w.join() 
 

Помогите, пожалуйста, с проблемой.

Ответ №1:

Если deque — это очередь с двойным завершением из python, вам необходимо ее импортировать:

 from collections import deque
 

Вы можете добавить его ниже import sys

Комментарии:

1. та же ошибка только для «для i в диапазоне (0, ПРОЦЕСС)»

Ответ №2:

Если вы импортировали его правильно, как предложено,

По-видимому, вам нужно ввести некоторый контент deque() , например, массив или что-то в этом роде. пожалуйста, смотрите здесь прилагается:

https://www.geeksforgeeks.org/deque-in-python/