Код: Выделить всё
import multiprocessing
from time import sleep
class bar():
def __init__(self): pass
def x(self, a, b): print(self, a, b)
def y(self, a, b=None, c=None): print(self, c, b, a)
def phandler(ops):
hbar = bar()
while True:
fname, args, kwargs = ops.get()
fn = eval("hbar." + fname)
fn(*args, **kwargs)
def x(*args, **kwargs): ops.put(["x", args, kwargs])
def y(*args, **kwargs): ops.put(["y", args, kwargs])
if __name__ == "__main__":
ops = multiprocessing.Manager().Queue()
multiprocessing.Process(target=phandler, args=(ops,)).start()
x(1, 2)
y(1, c=2)
sleep(1) # or any other way to wait for the functions to finish execution
Как видите, код x() и y() в основном контексте практически идентичны. Разве это не требует некоторой оптимизации? Я имею в виду своего рода функцию «диспетчера», которую можно вызывать под разными именами, примерно так:
Код: Выделить всё
def dispatch(*args, **kwargs): ops.put([__name__, args, kwargs])
x = y = dispatch
- Да, имя< /strong> не работает (это просто заполнитель), но я не смог найти другого метода, который возвращал бы «x» или «y», а не всегда просто «отправку».
< /li>
Вместо определения нескольких функций теперь мне нужно определить несколько псевдонимов для функции-диспетчера, что тоже неоптимально.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -different