在mozilla的进程和套接字管理器Circus中,什么是单例?
In Circus, the process and socket manager by mozilla, what is a singleton?
配置观察者时,在观察下包含这两个设置的目的是什么:
singleton = True
numprocess = 1
文档指出设置 singleton
具有以下效果:
singleton:
If set to True, this watcher will have at the most one process. Defaults to False.
我读到它不需要指定 numprocesses
但是在 github 存储库中他们提供了一个示例:
https://github.com/circus-tent/circus/blob/master/examples/example6.ini
这里也包括在内,它们同时指定了:
[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557
httpd = True
debug = True
httpd_port = 8080
[watcher:swiss]
cmd = ../bin/python
args = -u flask_app.py
warmup_delay = 0
numprocesses = 1
singleton = True
stdout_stream.class = StdoutStream
stderr_stream.class = StdoutStream
所以我会假设他们做一些不同的事情并且以某种方式一起工作?
numprocess
是给定观察者的初始进程数。在您提供的示例中,它设置为 1
,但用户通常可以根据需要添加更多进程。
singleton
只允许给定观察者最多 1
个进程 运行,因此它会禁止您动态增加进程数。
马戏团测试套件中的以下代码描述得很好::
@tornado.testing.gen_test
def test_singleton(self):
# yield self._stop_runners()
yield self.start_arbiter(singleton=True, loop=get_ioloop())
cli = AsyncCircusClient(endpoint=self.arbiter.endpoint)
# adding more than one process should fail
yield cli.send_message('incr', name='test')
res = yield cli.send_message('list', name='test')
self.assertEqual(len(res.get('pids')), 1)
yield self.stop_arbiter()
配置观察者时,在观察下包含这两个设置的目的是什么:
singleton = True
numprocess = 1
文档指出设置 singleton
具有以下效果:
singleton:
If set to True, this watcher will have at the most one process. Defaults to False.
我读到它不需要指定 numprocesses
但是在 github 存储库中他们提供了一个示例:
https://github.com/circus-tent/circus/blob/master/examples/example6.ini
这里也包括在内,它们同时指定了:
[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557
httpd = True
debug = True
httpd_port = 8080
[watcher:swiss]
cmd = ../bin/python
args = -u flask_app.py
warmup_delay = 0
numprocesses = 1
singleton = True
stdout_stream.class = StdoutStream
stderr_stream.class = StdoutStream
所以我会假设他们做一些不同的事情并且以某种方式一起工作?
numprocess
是给定观察者的初始进程数。在您提供的示例中,它设置为 1
,但用户通常可以根据需要添加更多进程。
singleton
只允许给定观察者最多 1
个进程 运行,因此它会禁止您动态增加进程数。
马戏团测试套件中的以下代码描述得很好::
@tornado.testing.gen_test
def test_singleton(self):
# yield self._stop_runners()
yield self.start_arbiter(singleton=True, loop=get_ioloop())
cli = AsyncCircusClient(endpoint=self.arbiter.endpoint)
# adding more than one process should fail
yield cli.send_message('incr', name='test')
res = yield cli.send_message('list', name='test')
self.assertEqual(len(res.get('pids')), 1)
yield self.stop_arbiter()