【问题标题】:How to let the user decide how many threads/tasks he wants to run?如何让用户决定他想运行多少线程/任务?
【发布时间】:2021-07-11 15:49:04
【问题描述】:

我在 python 中用 selenium 编写了一个小 Sneaker-Bot,我已经完成了主要部分。我需要编程的最后两部分是,我如何让用户在一个文本文件中输入他的帐户的用户名和密码,或者我听说 json 文件也很好,我如何使用程序访问这些数据和最后,我如何让用户为每个线程创建具有特定用户名和密码的线程/任务。我希望你能理解我的英语,也许你下面有一些人可以帮助我完成最后一部分。

【问题讨论】:

    标签: python multithreading selenium bots


    【解决方案1】:

    要从文件中获取用户名和密码,您可以使用:

    f = open(path_to_file)
    infolist = f.readlines()
    f.close()
    

    这将为文件中的每一行在列表中添加一个新项目,这意味着您只需将用户名和密码分别放在各自的行中。请小心,因为将密码放在文本文件中通常不是很安全,因此请确保您了解风险。

    至于第二部分,我将创建一个可以使用 for 循环填充线程的列表,其范围由用户输入指定。然后在迭代期间,为“args”参数提供其任务所需的凭证列表的某些项目。示例如下:

    from threading import *
    
    def spawnScraper(username, password):
        print(f'{username} and {password}')
        ## run the instance here
    
    def main():
        #f = open(path_to_file)
        #infolist = f.readlines()
        #f.close()
        # ^ above code to retrieve data from file
        infolist = ['user1', 'pass1', 'user2', 'pass2']  # using for demonstration
        threadnum = int(input('num >>> '))
    
        threads = []  # create list to store threads
    
        for threaditem in range(threadnum):
            uname = infolist[threaditem*2]  # get information from infolist
            pword = infolist[threaditem*2+1]
            threads.append(Thread(target=spawnScraper, args=[uname, pword]))  # create thread
            threads[-1].start()  # start thread
    
    main()
    

    确保取消注释文件打开部分以实际集成到您的程序中。如果您有任何其他问题,请务必在下方发表评论。

    【讨论】:

    • 感谢您的快速答复。对于第二部分,你能给我举个例子吗?实际上我问错了问题,因为在我考虑用户如何运行他所做的所有任务之前,我必须弄清楚如何让用户创建任务以及如何保存它们......实际上我会研究整个事情,我必须让线程模块更加了解,然后才能提出具体问题。
    • 别担心,我看看能不能制作出你指定的原型系统。
    • 哇,非常感谢!即使我不了解视图部分,这看起来已经非常好,因为我以前从未见过它们。那么我是否理解正确,即使每个线程都没有用户名和密码,用户也可以决定他想要启动多少个线程?所以基本上我需要一个程序,用户可以在其中选择创建一个新线程,并且用户可以在其中提供线程特定的登录数据,这些数据只能由该线程使用。此外,用户应该能够输入像 40 或 39 这样的尺寸和产品页面,代码将与 sizenumber 一起使用
    • ,产品页面和登录数据已经由我完成,我只需要不同的线程来运行具有不同大小、登录数据和产品页面的代码。是否可以将制作的线程保存在文件或其他东西中,这样用户每次再次运行脚本时都不必创建新的任务/线程?
    • 在当前形式下,如果请求的线程数多于凭据数量,代码会出错,但是如果您希望某些线程不需要,您可以使用“None”或类似内容填充文本文件证书。至于保存线程,我不相信这是可能的,除非使用“pickle”模块(如果你想看看)。此外,如果您希望将产品页面信息捆绑在文本文件中,只需将它们放在用户名上方并考虑函数定义、参数列表中的更改,并将“threaditem*2”更改为“threaditem*3”。任何其他问题,只需发表评论。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2020-10-07
    相关资源
    最近更新 更多