如何使用Process(target=)、start()、join()、alive()和terminate()使子进程超



此问题涵盖了多处理器的许多主题和场景。

堆栈溢出

我搜索了StackOverflow,虽然我发现了很多关于这方面的问题,但我还没有找到适合我的情况的答案/不是一个强大的python程序员来调整他们的答案来满足我的需求。我在多处理上工作了两个多星期。

我看了这里youtube,stackoverflow,谷歌,github都没有用:

https://www.youtube.com/watch?v=fKl2JW_qrso

https://www.youtube.com/watch?v=35yYObtZ95o

https://www.youtube.com/watch?v=IT8RYokUvvQ

在windows 中杀死一个函数一段时间后

使用多处理在Python中创建超时函数处理多处理。多处理池中出现超时错误。map_async((

许多其他人。

目标点

我正在生成不同网站的网站地图,网站URL显示在excel表中,"数据"(显示在下面的代码中(是网站的列名。有些网站需要花费大量时间进行爬网,我希望如果一个网站的爬网时间超过3分钟,它会停止进程,在3分钟内存储爬网的数据,然后启动新进程。

我的目标是(row),但不知道如何在if __name__ == '__main__':中访问row

程序

from multiprocessing import Process
import time
from pysitemap import crawler
import pandas
#describe function with parameter crawler
def do_actions(crawler):
#pandas to read excel file in excel file urls of different website, absolute path is path of excel sheet
df = pandas.read_excel(r'Absolute path')
for index, row in df.iterrows():
#data is name of column of excel sheet(urls)
Url=row['data']
try:
#crawler used to crawl urls that are in excel sheet
crawler(Url, out_file=f'{index}sitemap.xml')
except Exception as e:
print (e)
pass
if __name__ == '__main__':
#create a Process
action_process = Process(target=row)
# start a process
action_process.start()
#timeout 180 seconds
action_process.join(timeout=180)
#process alive after 180s terminate
if action_process is alive():
action_process.terminate()

您希望传递一个可调用函数作为目标函数,而不是函数本身的返回值。此外,要检查的特定属性是process.is_alive()。最后,虽然它不会影响您的程序,但您应该在if __name__ ...块下实例化action_process。这样想,您的子进程是否需要访问此变量?如果没有,就把它扔到那个块下面。

if __name__ == '__main__':
action_process = Process(target=do_actions, args=(crawler, ))
# start a process
action_process.start()
#timeout 180 seconds
action_process.join(timeout=180)
#process alive after 180s terminate
if action_process.is_alive():
action_process.terminate()

相关内容

  • 没有找到相关文章

最新更新