Как я смогу запустить мультипроцесс, если одна из задач использует Asyncio, а другая задача использует для запуска подпроцесс?
Вот основная функция:
import asyncio
import aioprocessing
import multiprocessing
import subprocess
# local imports
import steam_bot
async def open_auth():
_ = await asyncio.create_subprocess_exec('wine', '/Users/vortex/Desktop/Steam Project/SDA/Steam Desktop Authenticator.exe')
async def start_bot(q):
p = aioprocessing.AioProcess(target=steam_bot.main)
p.start()
await p.join()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
tasks = [
asyncio.ensure_future(open_auth()),
asyncio.ensure_future(start_bot()),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Steam Desktop Authenticator.exe использует https://github.com/Jessecar96/SteamDesktopAuthenticator и представляет собой процесс, который генерирует графический интерфейс и не имеет определенной последовательности остановки. (обратите внимание, что команда предназначена для запуска exe на Mac с использованием Wine, команда работает правильно).
Вот Steam_bot, использующий пакет Steamio:
import steam
class MyClient(steam.Client):
async def on_ready(self):
print("------------")
print("Logged in as")
print("Username:", self.user)
print("ID:", self.user.id64)
print("Friends:", len(await self.user.friends()))
print("------------")
async def on_message(self, message: steam.Message):
# we do not want the bot to reply to itself
if message.author == self.user:
return
if message.content.startswith("!hello"):
await message.channel.send(f"Hello {message.author}")
def main():
client = MyClient()
client.run("username", "password")
Ошибки обычно включают объект nonetype, который нельзя использовать в await, возникающий с .create_subprocess_exec() или проблему, указывающую, что steam_bot не содержит переменных, которые определены при инициализации класса (поэтому это не может быть проблемой).
Вполне может возникнуть проблема с тем, как я запускаю программу с помощью aioprocess. Я столкнулся с препятствием, пытаясь устранить ошибки такого типа. Мне нужна помощь в попытке запустить эти два типа программ в одной основной программе.
Обновление на основе предложения @dano
import sys
import asyncio
import aioprocessing
import multiprocessing
from concurrent.futures import ProcessPoolExecutor
#from multiprocessing import Process, Queue
import subprocess
# local imports
import api
import steam_bot
def open_auth():
subprocess.run(['wine', '/Users/vortex/Desktop/Steam Project/SDA/Steam Desktop Authenticator.exe'])
async def run_api(q):
p = aioprocessing.AioProcess(target=api.main, args=(q, ))
p.start()
await p.join()
def start_bot(q):
steam_bot.main(q)
async def main():
loop = asyncio.get_running_loop()
queue = aioprocessing.AioQueue()
with ProcessPoolExecutor() as pool:
open_auth_result = await loop.run_in_executor(pool, open_auth)
bot_result = await loop.run_in_executor(pool, start_bot, queue)
#api_result = await loop.run_in_executor(pool, run_api, queue)
if __name__ == "__main__":
asyncio.run(main())
Текущая проблема заключается в том, что похоже, что очередь вызывает ошибки, но, несмотря на это, у меня все еще есть следующая проблема: (кажется, это проблема с запуском бота, но кажется, что все
ошибки неверны)
concurrent.futures.process._RemoteTraceback:
"""
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 415, in runner
await self.login(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 563, in login
await self._login(SteamWebSocket.from_client, refresh_token=refresh_token or self.refresh_token)
^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 241, in refresh_token
return None if self.ws is None else self.ws.refresh_token
^^^^^^^
AttributeError: 'MyClient' object has no attribute 'ws'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/process.py", line 263, in _process_worker
r = call_item.fn(*call_item.args, **call_item.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 37, in start_bot
steam_bot.main(q)
File "/Users/vortex/Developer/tf2/steam_bot.py", line 220, in main
client.run("Username", "Password")
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 418, in run
asyncio.run(runner(), debug=debug)
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 414, in runner
async with self:
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 362, in __aexit__
if not self.is_closed():
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 266, in is_closed
return self._closed
^^^^^^^^^^^^
AttributeError: 'MyClient' object has no attribute '_closed'. Did you mean: 'close'?
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 50, in
asyncio.run(main())
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 44, in main
bot_result = await loop.run_in_executor(pool, start_bot)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'MyClient' object has no attribute '_closed'
Подробнее здесь: https://stackoverflow.com/questions/798 ... subprocess
Как использовать многопроцессорность с процессом asyncio и подпроцессом командной строки? ⇐ Python
Программы на Python
1763348639
Anonymous
Как я смогу запустить мультипроцесс, если одна из задач использует Asyncio, а другая задача использует для запуска подпроцесс?
Вот основная функция:
import asyncio
import aioprocessing
import multiprocessing
import subprocess
# local imports
import steam_bot
async def open_auth():
_ = await asyncio.create_subprocess_exec('wine', '/Users/vortex/Desktop/Steam Project/SDA/Steam Desktop Authenticator.exe')
async def start_bot(q):
p = aioprocessing.AioProcess(target=steam_bot.main)
p.start()
await p.join()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
tasks = [
asyncio.ensure_future(open_auth()),
asyncio.ensure_future(start_bot()),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Steam Desktop Authenticator.exe использует https://github.com/Jessecar96/SteamDesktopAuthenticator и представляет собой процесс, который генерирует графический интерфейс и не имеет определенной последовательности остановки. (обратите внимание, что команда предназначена для запуска exe на Mac с использованием Wine, команда работает правильно).
Вот Steam_bot, использующий пакет Steamio:
import steam
class MyClient(steam.Client):
async def on_ready(self):
print("------------")
print("Logged in as")
print("Username:", self.user)
print("ID:", self.user.id64)
print("Friends:", len(await self.user.friends()))
print("------------")
async def on_message(self, message: steam.Message):
# we do not want the bot to reply to itself
if message.author == self.user:
return
if message.content.startswith("!hello"):
await message.channel.send(f"Hello {message.author}")
def main():
client = MyClient()
client.run("username", "password")
Ошибки обычно включают объект nonetype, который нельзя использовать в await, возникающий с .create_subprocess_exec() или проблему, указывающую, что steam_bot не содержит переменных, которые определены при инициализации класса (поэтому это не может быть проблемой).
Вполне может возникнуть проблема с тем, как я запускаю программу с помощью aioprocess. Я столкнулся с препятствием, пытаясь устранить ошибки такого типа. Мне нужна помощь в попытке запустить эти два типа программ в одной основной программе.
Обновление на основе предложения @dano
import sys
import asyncio
import aioprocessing
import multiprocessing
from concurrent.futures import ProcessPoolExecutor
#from multiprocessing import Process, Queue
import subprocess
# local imports
import api
import steam_bot
def open_auth():
subprocess.run(['wine', '/Users/vortex/Desktop/Steam Project/SDA/Steam Desktop Authenticator.exe'])
async def run_api(q):
p = aioprocessing.AioProcess(target=api.main, args=(q, ))
p.start()
await p.join()
def start_bot(q):
steam_bot.main(q)
async def main():
loop = asyncio.get_running_loop()
queue = aioprocessing.AioQueue()
with ProcessPoolExecutor() as pool:
open_auth_result = await loop.run_in_executor(pool, open_auth)
bot_result = await loop.run_in_executor(pool, start_bot, queue)
#api_result = await loop.run_in_executor(pool, run_api, queue)
if __name__ == "__main__":
asyncio.run(main())
Текущая проблема заключается в том, что похоже, что очередь вызывает ошибки, но, несмотря на это, у меня все еще есть следующая проблема: (кажется, это проблема с запуском бота, но кажется, что все
ошибки неверны)
concurrent.futures.process._RemoteTraceback:
"""
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 415, in runner
await self.login(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 563, in login
await self._login(SteamWebSocket.from_client, refresh_token=refresh_token or self.refresh_token)
^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 241, in refresh_token
return None if self.ws is None else self.ws.refresh_token
^^^^^^^
AttributeError: 'MyClient' object has no attribute 'ws'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/process.py", line 263, in _process_worker
r = call_item.fn(*call_item.args, **call_item.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 37, in start_bot
steam_bot.main(q)
File "/Users/vortex/Developer/tf2/steam_bot.py", line 220, in main
client.run("Username", "Password")
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 418, in run
asyncio.run(runner(), debug=debug)
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 414, in runner
async with self:
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 362, in __aexit__
if not self.is_closed():
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/steam/client.py", line 266, in is_closed
return self._closed
^^^^^^^^^^^^
AttributeError: 'MyClient' object has no attribute '_closed'. Did you mean: 'close'?
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 50, in
asyncio.run(main())
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/Users/vortex/Developer/tf2/tf2mart/test_temp2.py", line 44, in main
bot_result = await loop.run_in_executor(pool, start_bot)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'MyClient' object has no attribute '_closed'
Подробнее здесь: [url]https://stackoverflow.com/questions/79819536/how-to-use-multiprocessing-with-an-asyncio-process-and-a-command-line-subprocess[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия