我已经了解了Python多进程的管道/队列/共享ctypes对象/管理器,我想将它们与Linux的匿名管道,命名管道,共享内存,套接字等进行比较.我现在有以下问题
Python多处理的管道和队列模块基于匿名管道.它是否提供命名管道?
Python multiprocessing.sharedctypes是否支持独立的进程通信?我认为它只支持父子进程或兄弟进程通信.
其中哪些只用于父子关系或兄弟情谊,可以在独立进程或不同主机之间进行通信?
它们各自的特点是什么,我应该如何选择它们?
提前致谢.
在这段代码中:
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for i in results:
print i(None)
Run Code Online (Sandbox Code Playgroud)
输出是"函数内部在0x107dea668"
如果我改变我到其他盘符,例如:
results = []
for i in [1, 2, 3, 4]:
def inner(y):
return i
results.append(inner)
for j in results:
print j(None)
Run Code Online (Sandbox Code Playgroud)
输出为"4"
回答
results = []
for i in [1, 2, 3, 4]:
def inner(y):
print "in inner:%s " % id(i)
return i
results.append(inner)
# i -> 4
for i in results: …Run Code Online (Sandbox Code Playgroud) 何时进行懒惰评估?(生成器,如果是迭代器?),什么时候延迟绑定?(关闭,常规功能?)
a = [1,2,3,4]
b = [lambda y: x for x in a]
c = (lambda y: x for x in a) #lazy evaluation
d = map(lambda m: lambda y:m, a) #closure
for i in b:
print i(None)
# 4 4 4 4
for i in c:
print i(None)
# 1 2 3 4
for i in d:
print i(None)
# 1 2 3 4
Run Code Online (Sandbox Code Playgroud) 在我的 Django 应用程序中,我需要将来自用户的请求代理到其他服务器。我使用asyncio/aiohttp client.
#user->request
.....
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(self.run(t1, t2, t3))
loop.run_until_complete(future)
......
# response
Run Code Online (Sandbox Code Playgroud)
当我的 django 服务器以 启动时python manager.py runserver,当用户请求时出现以下错误。
运行时错误:线程“Thread-1”中没有当前事件循环。
但是当我开始时Gunicorn,一切都很好。
也许我应该使用new_event_loop?
为什么没有问题Gunicorn?
为什么next我动态绑定到类的实例的这个方法失败并返回一个非迭代器对象?
from collections import Iterator
from collections import Iterable
from types import MethodType
def next(cls):
if cls.start < cls.stop:
cls.start += 1
return cls.start
else:
raise StopIteration
class Foo(object):
start, stop = 0, 5
def __iter__(self):
return self
if __name__ == "__main__":
foo = Foo()
setattr(foo, 'next', MethodType(next, foo, Foo))
print hasattr(foo, "next")
if isinstance(foo, Iterable):
print "iterable"
if isinstance(foo, Iterator):
print "iterator"
for i in foo:
print i
Run Code Online (Sandbox Code Playgroud)
输出:
iterable
True
TypeError: iter() returned non-iterator of type …Run Code Online (Sandbox Code Playgroud) python ×5
aiohttp ×1
coroutine ×1
django ×1
for-loop ×1
ipc ×1
iterator ×1
lambda ×1
late-binding ×1
pipe ×1
python-2.7 ×1
python-2.x ×1