У меня есть следующий скрипт, который работает, и я пытаюсь избежать использования '__main__'
внутри того же модуля:
def download():
urls = \
[
'https://ipleak.net/json',
'https://httpbin.org/get'
] * 4
downloads = asyn.init_download(urls, "json")
return downloads
def pprint_json(d):
print(json.dumps(d, indent=4, sort_keys=True))
def multiprocess_list(n_pools, func, list):
executor = concurrent.futures.ProcessPoolExecutor(n_pools)
futures = [executor.submit(func, item) for item in list]
concurrent.futures.wait(futures)
if __name__ == '__main__':
multiprocess_list(4, pprint_json, download())
Функция download()
, как видно из ее названия, загружает urls
асинхронно с использованием asyncio
и aiohttp
.
Я хочу выполнить multiprocess_list
из любого места «глобально»:
def multiprocess_list(n_pools, func, list):
executor = concurrent.futures.ProcessPoolExecutor(n_pools)
futures = [executor.submit(func, item) for item in list]
concurrent.futures.wait(futures)
def main(args):
parser = argparse.ArgumentParser(description="Multiprocessing a list.")
parser.add_argument("-n", "--n_pools", type=int, required=True)
parser.add_argument("-f", "--function", required=True)
parser.add_argument("-l", "--list", required=True)
args = parser.parse_args(args)
multiprocess_list(args.n_pools, args.function, args.list)
if __name__ == '__main__':
import sys
main(sys.argv[1:])
Импортировать указанный выше модуль в любой другой файл python и, возможно, запустите его так: (хотя не работает)
def download():
urls = \
[
'https://ipleak.net/json',
'https://httpbin.org/get'
] * 4
downloads = asyn.init_download(urls, "json")
return downloads
def pprint_json(d):
print(json.dumps(d, indent=4, sort_keys=True))
mp.main(["-n", 4, "-f", pprint_json, "-l", download()])
Это дает мне ошибку:
if not arg_string[0] in self.prefix_chars:
TypeError: 'int' object is not subscriptable
Следовательно, передайте один аргумент как функцию для запуска, другой как список или функцию, которая возвращает список, например download()
.
- Это можно сделать в python?
- Если да, может кто-нибудь объяснить, как?
- Мой подход правильный или я его полностью теряю?
NB : Мой переводчик использует Python3 .8, и я немного новичок в python, пожалуйста, потерпите меня немного.