将请求结果列表传递给多进程
Passing request result list into Multiprocess
正如标题所说,我正在尝试将 requests.get()
结果中的列表传递给多进程。该脚本工作正常,除了;即使已经使用 start()
.
触发,Multiprocess 也不会 运行ning
这是我使用的脚本:Code Example
我试过的是;将变量传递给多进程:
global headers, domainlist
它仍然不会 运行 多进程,终端也不会产生任何错误消息并且让我感到困惑,因为多进程触发器很好。对不起英语不好...
多线程是这种情况的理想选择,因为它受 I/O 限制。这是 OP 原始代码的精简但功能齐全的变体,演示了如何完成此操作:
from concurrent.futures import ThreadPoolExecutor
import requests
import re
HACKERTARGET = 'https://api.hackertarget.com/hostsearch'
SCHEME = 'http://'
valid_domains = []
def process(domain):
try:
url = f'{SCHEME}{domain}'
print(f'Checking -> {url}')
requests.get(url, timeout=1.0, allow_redirects=False).raise_for_status()
valid_domains.append(url)
except Exception as e:
pass
domain = input('Enter domain (without scheme): ')
try:
(r := requests.get(HACKERTARGET, params={'q': domain})).raise_for_status()
with ThreadPoolExecutor() as executor:
executor.map(process, re.findall("(.*?),", r.text))
print(valid_domains)
except Exception as e:
print(e)
正如标题所说,我正在尝试将 requests.get()
结果中的列表传递给多进程。该脚本工作正常,除了;即使已经使用 start()
.
这是我使用的脚本:Code Example
我试过的是;将变量传递给多进程:
global headers, domainlist
它仍然不会 运行 多进程,终端也不会产生任何错误消息并且让我感到困惑,因为多进程触发器很好。对不起英语不好...
多线程是这种情况的理想选择,因为它受 I/O 限制。这是 OP 原始代码的精简但功能齐全的变体,演示了如何完成此操作:
from concurrent.futures import ThreadPoolExecutor
import requests
import re
HACKERTARGET = 'https://api.hackertarget.com/hostsearch'
SCHEME = 'http://'
valid_domains = []
def process(domain):
try:
url = f'{SCHEME}{domain}'
print(f'Checking -> {url}')
requests.get(url, timeout=1.0, allow_redirects=False).raise_for_status()
valid_domains.append(url)
except Exception as e:
pass
domain = input('Enter domain (without scheme): ')
try:
(r := requests.get(HACKERTARGET, params={'q': domain})).raise_for_status()
with ThreadPoolExecutor() as executor:
executor.map(process, re.findall("(.*?),", r.text))
print(valid_domains)
except Exception as e:
print(e)