Поток и очередь внутри класса в Python - PullRequest
0 голосов
/ 08 декабря 2018

Я написал следующий код, который создает некоторые пакеты и отправляет их на сервер UDP с помощью FIFO.Существует функция генератора пакетов, которая создает заголовок пакетов, и Генератор пакетов, который создает случайные слова и числа для тела.Пакеты сохраняются в списке и отправляются по очереди в очередь для отправки на сервер UDP.

import random
import string
import threading
import time
import queue
import socket
import pickle

server = '127.0.0.1'
port = 7766
clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #Making a UDP socket

packet = []
sequence = []

def PktGen(): #Packet Generator
    chance = random.randint(1, 20)
    print(chance)
    for i in range(chance):
        sequence.append(i)
    try:
        for i in range(chance):
            init = '$$$$'
            source = "name1"
            destination = "name2"
            beforeboddy = '@@@@'
            boddy = BoddyGen(60)
            end = '++++'
            packet.append(init + source + ',' + destination + ',' + str(chance) + ',' + str(sequence[i]) + beforeboddy + boddy + end) 
        return packet


    except Exception as e:
        print(e)


def BoddyGen(size):
    try:
        chars = string.ascii_letters
        digits = string.digits
        charrand = ''
        for i in range(size):
            charrand += random.choice(chars + digits)
        return charrand

    except Exception as e:
        print(e)


lk = threading.Lock()
plist = []

plist = PktGen()

print(plist)

def worker():
    while True:
        lk.acquire()
        td = random.uniform(0, 2.5)
        time.sleep(td)
        item = q.get()
        item = item.encode()
        clisock.sendto(item, (server, port))
        lk.release()
        q.task_done()


num_worker_threads = 3
q = queue.Queue()

for i in range(num_worker_threads):
     t = threading.Thread(target=worker)
     t.daemon = True
     t.start()

for p in plist:
    q.put(p)

q.join()

Теперь я хочу использовать этот код внутри класса и не знаю, как использовать моего работника.Функция и поток и очередь внутри класса.

Я ценю любую помощь.

Спасибо

...