Python线程:线程b

2024-04-24 22:56:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我检查我的客户国家,以便我知道我可以提供哪些服务布拉布拉布拉。。。。。。 所以问题是线程阻塞,例如它检查15-20和阻塞,我想要一个解决方案来保持它继续 代码是:

import requests
import re
from sys import argv
from Queue import Queue
from threading import Thread


e = argv[1]

emails = open(e, 'r').readlines()
emails = map(lambda s: s.strip(), emails)

valid=[]

def base(email):
    xo = requests.get("http://www.paypal.com/xclick/business="+email,     headers={"User-Agent":"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0"}).text
    x = re.search("s.eVar36=\"(.*?)\";", xo)
    try:
        if x.group(1) != "":
            print "%s === %s" % (email,x.group(1))
            w=open(str(x.group(1))+".txt", 'a')
            w.write(email+"\n")
            valid.append(email)
    except:
        pass

def work():
    email=q.get()
    base(email)
    q.task_done()

THREADS = 25
q=Queue()

for i in range(THREADS):
    t=Thread(target=work())
    t.daemon=True
    t.start()

if (len(argv)>0):
    for email in emails:
        q.put(email)
    q.join()`enter code here

提前谢谢


Tags: fromimportrebasequeueemaildefgroup
1条回答
网友
1楼 · 发布于 2024-04-24 22:56:57

问题是在创建线程时调用work(),而不是传递work函数。与其在代码中进行更改,不如考虑移动python的ThreadPool,这将为您带来繁重的负担。下面是一个实现所需内容的示例。你知道吗

map为迭代器中的每封电子邮件调用您的工作者,并以迭代器(python3)或列表(python2)的形式返回工作者的结果。你的工作人员会为每封邮件返回一封有效的邮件,或者不返回任何邮件,所以你只需要在最后过滤掉那些不存在的邮件。你知道吗

import requests
import re
from sys import argv
import multiprocessing.pool

e = argv[1]

emails = [line.strip() for line in open(e)]


def base(email):
    print("getting email {}".format(email))
    try:
        xo = requests.get("http://www.paypal.com/xclick/business="+email,     headers={"User-Agent":"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0"}).text
        x = re.search("s.eVar36=\"(.*?)\";", xo)
        try:
            if x.group(1) != "":
                print "%s === %s" % (email,x.group(1))
                with open(str(x.group(1))+".txt", 'a') as w:
                    w.write(email+"\n")
                return email
        except:
            pass
    except requests.exceptions.RequestException as e:
        print(e)

THREADS = 25
pool = multiprocessing.pool.ThreadPool(THREADS)
valid = [email for email in pool.map(base, emails, chunksize=1) if email]
print(valid)
pool.close()

相关问题 更多 >