首先,我知道我可以使用线程来完成这样的任务,像这样:执行Python代码的任务蕾
import Queue
import threading
# called by each thread
def do_stuff(q, arg):
result = heavy_operation(arg)
q.put(result)
operations = range(1, 10)
q = Queue.Queue()
for op in operations:
t = threading.Thread(target=do_stuff, args = (q,op))
t.daemon = True
t.start()
s = q.get()
print s
然而,在谷歌应用程序引擎有一些所谓的NDB微进程,并根据他们的您可以使用它们并行执行代码。
Tasklet是一种编写并发运行函数的方法,不需要 线程; tasklet通过事件循环执行,并可以使用yield 语句暂停自己阻止I/O或某些其他操作。阻塞操作的概念被抽象为Future类,但是一个tasklet也可能产生一个RPC,以等待 RPC完成。
是否有可能完成类似上面的线程示例?
我已经知道如何使用get_async()处理检索实体(从文档页面的示例中获得它),但在并行代码执行方面对我来说很不清楚。
谢谢。
注意,线程是唯一真正的平行,如果他们释放GIL,所以它有一个编译扩展与nogil被调用,I/O等 – Davidmh
我看到这个演示HTTP://www.dabeaz。 com/python/GIL.pdf,它明确说明你用它得到了什么,但是在我的情况下,我可以获得更好的性能......但它仍然不能回答我的问题。 – vertazzar
如果您尝试在面对请求的前面使用线程,则它们的运行时间不能超过请求生存时间。另外,如果你没有使用任何谷歌服务(rpc),你将不会得到任何真正的并发性,因为你有一个核心。我过去的测试显示没有irpc的前端线程会让速度变慢。 –