Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2011 15:33:59

Kanat
От:
Зарегистрирован: 2011-09-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

послать 50 запросов

Всем привет ткните что курить…
Необходимо послать на сервер параллельно множество запросов в кратчайшее время..

from multiprocessing import Process, Lock
from time import *
import pycurl
import urllib
import random
def sendtrnx():
xmlrpc_header = [
"User-Agent: PycURL XML Test", "Content-Type: text/xml"
]
c = pycurl.Curl()
url = "https://blabla.bla/"
c.setopt(c.URL, url)
c.setopt(c.PROXY,"PROXY") #proxy settings
c.setopt(c.PROXYPORT,3128) #proxy port
c.setopt(c.PROXYUSERPWD,"user:pass")
c.setopt(c.WRITEDATA,file1)
c.setopt(c.NOPROGRESS,0)
c.setopt(c.SSL_VERIFYPEER, 0)
c.setopt(c.SSL_VERIFYHOST, 1)
c.setopt(c.HTTPHEADER, xmlrpc_header)
c.setopt(c.POSTFIELDS,stroka)
c.setopt(c.POSTFIELDSIZE,len(stroka))
c.perform()
for i in range(1,3):
param1=random.randrange(1,6,1)
param2=random.randrange(6,6600000,1)
stroka="""
<Message id="%s" version="1.0">
<XMLRequest>%s</XMLRequest>
</Message>
"""%(param1,param2)

def f(l,i):
l.acquire()
sendtrnx()
l.release()
if __name__ == '__main__':
lock = Lock()
for num in range(2):
Process(target=f,args=(lock,num)).start()
Тоесть я думал,что будет 2 процеса которые вызовут по 2 раза функцию sendtrnx()..но болт…
ткните новичка.



Офлайн

#2 Сен. 13, 2011 16:04:44

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

послать 50 запросов

Зачем вам Lock() если необходимость в параллельном выполнении?

Офлайн

#3 Сен. 13, 2011 16:31:07

Kanat
От:
Зарегистрирован: 2011-09-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

послать 50 запросов

Взял из примера.Может есть какие то примеры,схожие с моим.?
Я чесно говоря даже не могу четко понять алгоритм действий



Офлайн

#4 Сен. 13, 2011 17:04:41

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

послать 50 запросов

Уберите из кода строчки l.acquire() и l.release().
И будет вам счастье )

Офлайн

#5 Сен. 13, 2011 21:46:02

Kanat
От:
Зарегистрирован: 2011-09-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

послать 50 запросов

спасибо…
еще вопрос..
а как реализовать многопоточную отсылку запроса?sendtrnx…
еслу убрать acquire и release…то уникально

    for i in range(1,3):
param1=random.randrange(1,6,1)
param2=random.randrange(6,6600000,1)
всего 1 раз…

Мне надо послать 500 раз одновременно уникальных post для проверки работоспособности сервера…(утилиты не подходят)



Офлайн

#6 Сен. 13, 2011 22:49:49

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

послать 50 запросов

Поместите этот код внутрь sendtrnx

Офлайн

#7 Сен. 13, 2011 23:56:47

sanzstez
От:
Зарегистрирован: 2011-02-25
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

послать 50 запросов

Возможно сам сервер будет отвергать множество одновременных запросов. Это надо учесть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version