Для моего проекта в колледже я пытаюсь разработать генератор трафика на основе Python. Я создал 2 машины CentOS на vmware, и я использую 1 в качестве моего клиента и 1 в качестве моей серверной машины. Я использовал псевдоним IP метод увеличения количества клиентов и серверов с использованием только одной клиент-серверной машины. До сих пор я создал 50 псевдонимов IP на моей клиентской машине и 10 псевдонимов IP на моей серверной машине. Я также использую многопроцессорный модуль для одновременной генерации трафика со всех 50 клиентов на все 10 серверов. Я также разработал несколько профилей (1 КБ, 10 КБ, 50 КБ, 100 КБ, 500 КБ, 1 МБ) на своем сервере (в каталоге /var/www/html, так как я использую Apache Server), и я использую urllib2 для отправки запроса на эти профили из моя клиентская машина. Я использую https://stackoverflow.com/questions/26903520/how-to-send-http-request-using-virtual-ip-address-in-linux сначала привязаться к любому из IP-адресов исходного псевдонима, а затем отправить запрос с этого IP-адреса, используя urllib2. Здесь, чтобы увеличить мой число TCP-соединений, я пытаюсь использовать модуль multiprocessing.Pool.apply_async. Но я получаю эту ошибку «RuntimeError: синхронизированные объекты должны быть разделены между процессами только через наследование» при запуске моих сценариев. После небольшой отладки я обнаружил, что эта ошибка вызвана использованием multiprocessing.Value. Но я хочу разделить некоторые переменные между своими процессами, а также увеличить количество TCP-соединений. Какой другой модуль (кроме multiprocessing.Value) можно использовать здесь для совместного использования некоторых общих переменных? Или еще есть какое-то другое решение для этого запроса?
'''
Traffic Generator Script:
Here I have used IP Aliasing to create multiple clients on single vm machine.
Same I have done on server side to create multiple servers. I have around 50 clients and 10 servers
'''
import multiprocessing
import urllib2
import random
import myurllist #list of all destination urls for all 10 servers
import time
import socbindtry #script that binds various virtual/aliased client ips to the script
m=multiprocessing.Manager()
response_time=m.list() #some shared variables
error_count=multiprocessing.Value('i',0)
def send_request3(): #function to send requests from alias client ip 1
opener=urllib2.build_opener(socbindtry.BindableHTTPHandler3) #bind to alias client ip1
try:
tstart=time.time()
for i in range(myurllist.url):
x=random.choice(myurllist.url[i])
opener.open(x).read()
print "file downloaded:",x
response_time.append(time.time()-tstart)
except urllib2.URLError, e:
error_count.value=error_count.value+1
def send_request4(): #function to send requests from alias client ip 2
opener=urllib2.build_opener(socbindtry.BindableHTTPHandler4) #bind to alias client ip2
try:
tstart=time.time()
for i in range(myurllist.url):
x=random.choice(myurllist.url[i])
opener.open(x).read()
print "file downloaded:",x
response_time.append(time.time()-tstart)
except urllib2.URLError, e:
error_count.value=error_count.value+1
#50 such functions are defined here for 50 clients
def func():
pool=multiprocessing.Pool(processes=750)
for i in range(5):
pool.apply_async(send_request3)
pool.apply_async(send_request4)
pool.apply_async(send_request5)
#append 50 functions here
pool.close()
pool.join()
print"All work Done..!!"
return
start=float(time.time())
func()
end=float(time.time())-start
print end
+=
атомарной, поскольку это привело бы к двум отдельным вызовам прокси (один раз для получения текущего значения, а затем еще один, чтобы установить его на новый val). Хороший улов по вопросуget_lock()
. Я думаю, вам придется использовать управляемый менеджеромLock()
вместо этого. 05.06.2019