python - 如何重置在 Python 的无限 while 循环中运行的异步循环或池?
问题描述
我在这里有点 Python 新手。我正在编写将从 Web URL 请求 JSON 数据的代码,继续更新请求,直到达到某个时间范围内的数据,将所有数据保存到文件中(可能是数百万行,所以我试图保留内存不足),在统计分析后将数据压缩为 CSV 文件的单行。我已经记下了那段代码,但程序会循环遍历一个包含数千个名称的列表,这些名称在变量中用于调用 URL。如果我在一个循环中运行它,它会比我的时间框架更长,并且程序继续落后。
我尝试将其作为使用 ThreadPoolExecutor 的异步循环和具有数十个工作人员的池来运行。我可以使用比可用处理器内核更多的线程,因为大部分时间都花在等待 URL 响应上,这会打开线程以发出新请求。
也就是说,我无法让任何形式的池或循环继续通过 while 循环的单次迭代。代码看起来像这样:
variables = ['thousands', 'of', 'variables']
interval = 15 # in minutes
class DoSomething()
def dosomething(self, variable, date, initialtime, interval):
callweburl(variable, date, initialtime, interval)
runstatistics
saveCSV
def worker(variable)
try:
ds = DoSomething(variable, date, initialtime, interval).dosomething()
api.ds(variable)
except:
return False
pool = Pool(100)
program to get date, initialtime and currenttime
while initialtime < currenttime:
while initialtime < initialtime * multiple of interval
if __name__ == '__main__'
for variable in variables:
pool.apply_async(worker, (variable,))
initialtime = initialtime + interval
program to get date, new initialtime and currenttime
time_to_pause = initialtime - currenttime + interval
if time_to_pause > 0.0:
time.sleep(time_to_pause)
当我apply_async
用DoSomething(variable, date, initialtime, interval).dosomething()
. 当我使用池或循环运行它们时,它们充其量只是零星的。根据我放置pool.close()
和的位置pool.join()
,它们要么运行一个循环并关闭程序,要么将在池收集的时间间隔内遍布整个电路板。有时它会在同一时间间隔内收集两次数据,有时它会一次跳过几天。
有没有办法关闭循环或池并重新初始化它?我还尝试将池或循环初始化移动到调用 while 循环之前。似乎没有什么工作非常正确。
提前感谢您的帮助!
解决方案
推荐阅读
- np - 证明最长路径是具有负边权重的 NP-Hard
- c++ - 安装 1.1.92.1 VulkanSDK xmemory0 和矢量错误后
- asp.net - 在 IIS 中从 http 移植到 https
- python - 如何在 Python 中成对调用两个不同列表中的值来指定两个连续刺激的参数?
- python - 使用 node.js 的 Python twitterbot
- spring-boot - Spring Boot:以事务方式调用你自己的 RestController
- php - symfony dql 不通过函数之间的连接传递别名
- amazon-web-services - 亚马逊应用程序负载均衡器上托管的套接字连接的 400 错误请求
- sql - SSIS检查是否第一个月使用变量A运行,如果不使用变量B运行
- docker - Docker 登录总是使用 HTTP 而不是 HTTPS