Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用多线程命中api_Python_Multithreading_Python Requests - Fatal编程技术网

在python中使用多线程命中api

在python中使用多线程命中api,python,multithreading,python-requests,Python,Multithreading,Python Requests,我正在尝试使用python从api请求一些数据 以下是我正在使用的代码: import concurrent.futures import requests def my_function(url): response = requests.get(url) with open("data.csv", "a+") as f: f.write(response+'\n') with concurrent.futures.T

我正在尝试使用python从api请求一些数据

以下是我正在使用的代码:

import concurrent.futures
import requests

def my_function(url):
    response = requests.get(url)
    with open("data.csv", "a+") as f:
        f.write(response+'\n')

with concurrent.futures.ThreadPoolExecutor() as executer:
    for i in range(9120000000, 9130000000):
        try:
            url = f"https://mysite.test/api/v1/{str(i)}"
            executer.submit(my_function, url)
        except:
            "There was an error!"
下面是我的问题:

1-我当前使用的代码将同时打开
10000000个线程
?这可能吗?
2-如果是,那么这是否被视为该服务器上的
ddos攻击?
3-有没有办法将该范围细分为更小的范围,比如200个基于区间的范围?
4-有更好的方法吗

此脚本将部署在heroku服务器上。根据heroku文档,一个免费的dyno最多只能支持256个线程

如有任何帮助和/或建议,将不胜感激

1-我当前使用的代码将同时打开10000000个线程?这可能吗

不,您将只打开使用
max\u workers
参数指定的线程数。由于在初始化ThreadPoolExecutor时没有指定它,因此它将采用默认值,该值将根据您的python版本而变化。您可以在此处了解更多信息:。但简而言之,并发线程数将远远少于10000000个

2-如果是,那么这是否被视为该服务器上的ddos攻击

取决于服务器。如果您的服务器允许您拥有threadpool executor将同时提供给您的执行量,则不会

3-有没有办法将该范围细分为更小的范围,比如说,200个基于区间的范围

如果担心服务器过载,可以在脚本中添加time.sleep(秒到秒的sleep)来降低速度。这将使脚本在启动新线程之间暂停

4-有更好的方法吗


考虑到这一目标的有限背景,很难说。如果API允许批处理请求,您可以指定一个数字范围并返回该范围的信息,那么这可能会更好。这会更有效率,但前提是您有能力更改正在调用的api。

1)看看2)一次访问一个站点10000000次可能是不明智的,尤其是从单个IP地址3)与1相同4)与1@goalie1998你说得对,这是不明智的!!!我还没做,这就是我为什么要问的原因!顺便说一下,脚本将更改ip地址,为了简单起见,我没有在这里包括这一部分。似乎我能定义工人的数量。哈哈!谢谢你的帮助,我很感激!谢谢你的帮助。我真的不知道我可以在线程之间睡觉!即使服务器的线程数少于“攻击”脚本的线程数,但它仍然不是一种
DDOS
攻击,因为第一个
D
,换句话说,代表
分布式
,意思是来自多个地方。正确的短语应该是
DOS
attack,因为只有OP在运行脚本。@Countour Integral好吧,这个脚本不是写为“attack”的!这就是为什么我在运行它之前要问。你说得对,我应该使用正确的术语,是的,应该是
DOS
attack。