Я использую ProcessPoolExecutor
, как показано ниже
def main(argv):
set_argv(argv)
# running code. Loop button click, enter text, submit.
if __name__ == '__main__':
executer = ProcessPoolExecutor(max_workers=9)
argvs = ["D", "E", "F", "G", "H", "I", "J", "K", "L"]
for argv in argvs:
executer.submit(main,argv)
Но этот код использует процессор на 100%, и каждый процесс занимает вдвое больше времени, чтобы завершить только один процесс.
Поэтому я хочу использоватьasyncio
для уменьшения загрузки процессора.но код ниже генерирует ошибку.
async def async_set():
coroutines = []
argvs = ["D", "E", "F", "G", "H", "I", "J", "K", "L"]
fts = [loop.run_in_executor(main(m)) for m in argvs]
for f in asyncio.as_completed(fts, loop=loop):
await f
async def main(argv):
set_argv(argv)
# running code. Loop button click, enter text, submit.
loop = asyncio.get_event_loop()
loop.run_until_complete(async_set())
loop.close()
И ошибка:
fts = [loop.run_in_executor(main(m)) for m in argvs]
TypeError: run_in_executor() missing 1 required positional argument: 'func'
ㅡ * ㅡ ㅡ ㅡㅡ
После изменения fts
как показано ниже
fts = [loop.run_in_executor(None, main, m) for m in argvs]
Произошла ошибка, но только 1 процесс работает нормально
Traceback (most recent call last):
File "C:/Users/admin/Desktop/test/Version/test.py", line 593, in <module>
loop.run_until_complete(async_set())
File "C:\Python\Python37\lib\asyncio\base_events.py", line 584, in run_until_complete
return future.result()
File "C:/Users/admin/Desktop/test/Version/test.py", line 60, in async_set
await f
File "C:\Python\Python37\lib\asyncio\tasks.py", line 533, in _wait_for_one
return f.result() # May raise f.exception().
File "C:\Python\Python37\lib\concurrent\futures\thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "C:/Users/admin/Desktop/test/Version/test.py", line 67, in main
set_login(ID, PW)
File "C:/Users/admin/Desktop/test/Version/test.py", line 188, in set_login
driver.find_element_by_xpath('//*[@id="header"]/div/div[1]/ul[2]/li[1]/a').click()
File "C:\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=73.0.3683.86)
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17763 x86_64)