如何在以后进行调用并等待Python完成?

我有以下代码,其中有一个用户名列表,我尝试使用net user\domain | find somegroup检查用户是否在特定的Windows用户组中

问题是,我为每个用户名大约8个用户组运行该命令,速度很慢。我想使用未来甚至单独的线程发送这些调用(如果它能让它更快的话)

在我做任何其他事情之前,我只能在最后等待。我如何用Python来做呢

用户列表中的一个用户名的

:
response=requests.get(somecontent)
bs_parsed=BeautifulSoup(response.content,'html.parser')
find_all2=bs_parsed.find(“div”,{“class”:“QuickLinks”})
name=re.sub(“\s\s+”,“”,find_all2.find(“td”,text=“name”)。查找下一个兄弟姐妹(“td”)。text)
find_all=bs_已解析。find_all(“div”,“class”:“visible”})
所有_perms=“”
d、 setdefault(一个用户名+”(“+name+”),[])
对于find_all中的值:
test=value.find(“a”,{“onmouseover”:True})
如果测试不是无:
如果test.text中的“MyAppID”:
d[one_username+”(“+name+”)]追加(test.text)
对于组中的组:
尝试:
d[one_username+”(“+name+”)]追加(检查输出(“净用户/域”+one_username+“|find\”“+group+”\”,shell=True,stderr=subprocess.STDOUT)。strip()。解码(“utf-8”))
除例外情况外:
通过

(这个答案目前忽略了HTML解析您的代码所做的工作……您可以将其排入一个池中,就像这种方法将net用户调用排入队列一样)

首先,让我们定义一个函数,它接受(用户、组)元组,并返回所需的信息

#调用网络用户查找(用户、组)信息的函数
def获取组信息(usr\U grp):
#解包参数
usr,grp=usr\U grp
尝试:
返回(usr、grp、,
检查输出(
&“净用户/域”+usr+“查找”+grp+“;,
shell=True,
stderr=subprocess.STDOUT
).strip().decode(“utf-8”))
除例外情况外:
返回(usr、grp、无)

现在,我们可以使用multiprocessing.dummy.pool

来自multiprocessing.dummy导入池的


进口itertools
#创建一个包含四个工作线程的池
池=池(4)
#为每个用户、组运行“获取组信息”
async\u result=pool.map\u async(获取组信息,itertools.product(用户列表,组))
#现在做一些我们关心的其他工作
...
#然后等待我们的结果
results=async_result.get()

结果(用户、组、数据)元组的列表,可以根据需要进行处理

注意:由于平台不同,此代码目前未经测试

发表评论