1

我需要知道是否有一种方法可以在一行中使用多线程,而不是整个程序。

也就是说,我想将程序作为单个线程运行,但在它的中间我希望一个特定的行是多线程的。我想多线程这样的东西:

br.open("http://www.google.com.pk/search?q="+str(m))

所以,基本上我想打开所有链接(m可以假设 50 个不同的值),我不想一个接一个地打开它们。我想一次打开所有50个!如果我一一打开它们,它会减慢进程,我想避免这种情况。

4

3 回答 3

3

你想看看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 请求。是一个很好的例子。

于 2012-06-19T07:50:30.383 回答
1

你在异步通信之后。我自己没有尝试过,但看看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。对于您的要求来说,这可能是多余的,而且学习曲线是出了名的陡峭。

于 2012-06-19T07:50:31.800 回答
0

我在这里实际上是在尝试回答 OP 提出的原始问题,由于明显的可读性问题,我不推荐此代码,但就像在 Java 中一样,您实际上可以在 Python 中从单行运行线程。

我们将使用 Python 中的 Thread 类

from threading import Thread

定义要调用的函数。

def func1():
   print("Hello World")

从一行开始一个线程

Thread(target=func1).start()

这就是您在 python 中启动一个内衬线程的方式。
有关如何将参数传递给目标函数的信息

于 2018-02-17T04:22:27.870 回答