我需要知道是否有一种方法可以在一行中使用多线程,而不是整个程序。
也就是说,我想将程序作为单个线程运行,但在它的中间我希望一个特定的行是多线程的。我想多线程这样的东西:
br.open("http://www.google.com.pk/search?q="+str(m))
所以,基本上我想打开所有链接(m
可以假设 50 个不同的值),我不想一个接一个地打开它们。我想一次打开所有50个!如果我一一打开它们,它会减慢进程,我想避免这种情况。
我需要知道是否有一种方法可以在一行中使用多线程,而不是整个程序。
也就是说,我想将程序作为单个线程运行,但在它的中间我希望一个特定的行是多线程的。我想多线程这样的东西:
br.open("http://www.google.com.pk/search?q="+str(m))
所以,基本上我想打开所有链接(m
可以假设 50 个不同的值),我不想一个接一个地打开它们。我想一次打开所有50个!如果我一一打开它们,它会减慢进程,我想避免这种情况。
你想看看threading.Thread类。
import threading
def worker():
"""thread worker function"""
print 'Worker'
return
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
如果您正在执行多个 HTTP 请求,您可能还想查看queue.Queue然后您将排队多个 http 请求。这是一个很好的例子。
你在异步通信之后。我自己没有尝试过,但看看grequests。它曾经是请求库的一部分,但已被排除在外。用法(来自他们的 github 页面)似乎很容易:
import grequests
urls = [
'http://www.heroku.com',
'http://tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
grequests.map(rs)
如果您想保留在 Python 标准库中,可以查看asyncore模块。
此外,另一种选择是Twisted。对于您的要求来说,这可能是多余的,而且学习曲线是出了名的陡峭。
我在这里实际上是在尝试回答 OP 提出的原始问题,由于明显的可读性问题,我不推荐此代码,但就像在 Java 中一样,您实际上可以在 Python 中从单行运行线程。
我们将使用 Python 中的 Thread 类
from threading import Thread
定义要调用的函数。
def func1():
print("Hello World")
从一行开始一个线程
Thread(target=func1).start()
这就是您在 python 中启动一个内衬线程的方式。
有关如何将参数传递给目标函数的信息