2015-10-29 6 views
0

Я борюсь с тем, что мои функции в python, для создания пакетов для Scapy, используют только 1 процессор за раз. Я искал множественную обработку, но я действительно не знаю, как я мог ее реализовать. Я также пытался использовать ThreadPool, но результат тот же.Python Scapy использует несколько процессоров

Вот отрезок моего кода.

def code(a,b,c) 

    while a < b : 
     ## build pkt 100000 times 

    send(pkt) 

def main(): 
    ##defining some intregers a b c 
    code(a,b,c) 

if __name__ == "__main__": 

При этом функция while вычисляется только одним процессором. Это занимает слишком много времени, чтобы генерировать тысячи пакетов.

Есть ли простой способ сделать это?

ответ

1

Вы должны разбить список пакетов в кусках и позволить процессам выполнять эту работу за вас.

EDIT: требуется Python3 или параллельный модуль. Предыдущие примеры просто дали идею. Это рабочее решение. Не стесняйтесь изменять постоянные значения.

from concurrent.futures import ProcessPoolExecutor 


START = 0 
END = 1000000 
CHUNK_SIZE = 1000 


chunks = range(START, END, CHUNK_SIZE) 


def code(offset): 
    packets = [] 
    chunk = offset + CHUNK_SIZE 

    for index in range(offset, chunk): 
     packet = build_packet(index) 
     packets.append(packet) 

    return packets 


with ProcessPoolExecutor() as executor: 
    packets = [] 

    for chunk in executor.map(code, chunks): 
     packets += chunk 

send(packets) 
+0

Я действительно не знаю, что вы имеете в виду: D im пытается реализовать его, но не вижу, что делают эти команды. Не могли бы вы объяснить это больше? –

+0

Если я правильно понял, что вы задаете вопрос, что вы хотите сделать, это сразу отправить несколько пакетов? В этом случае то, что делает логика, это разбиение пакетов на куски и отправка каждого куска работнику пула потоков. Является ли ваш процессор создания пакетов логическим процессором интенсивным? – noxdafox

+0

Я создаю как тысячи пакетов в 1 раз. Все они, я вложил в какую-то матрицу. Затем эта матрица отправляется. Существует цикл, который создает эти пакеты, и я вижу, что 1 процессор (всего 8) выполняет всю работу. –

Смежные вопросы