p.start() for i in range(10): q.put(i) q.put(None) pid = os.getpid() for x in iter(port0.recv, None): print(pid, x) p.join() def worker(*, q: multiprocessing.Queue, port: multiprocessing.Pipe): # TODO: use JoinableQueue while not q.empty(): pid = os.getpid() x = q.get() if x is None: break print(pid, "<<", x) import time time.sleep(0.5) print(pid, ">>", x) port.send(f"<<{x}>>") # todo: finaize port.send(None) port.close() as_subcommand.run()
from handofcats import Config, as_subcommand @as_subcommand def foo(): pass cfg = Config(ignore_logging=True) if __name__ == "__main__": as_subcommand.run(config=cfg)
from handofcats import as_subcommand @as_subcommand def foo(target: str): import heavy_module print("foo") heavy_module.hello(target) @as_subcommand def bar(target: str): import heavy_module print("bar") heavy_module.hello(target) if __name__ == "__main__": import sys import itertools sep = "-" itr = iter(sys.argv[1:]) while True: argv = list(itertools.takewhile(lambda x: x != sep, itr)) if len(argv) == 0: break as_subcommand.run(argv=argv)
from handofcats import as_subcommand as register @register def hello(*, name: str = "world"): print(f"hello {name}") @register def byebye(name): print(f"byebye {name}") register.run() def main(argv=None): import argparse parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(title='subcommands', dest='subcommand') subparsers.required = True fn = hello sub_parser = subparsers.add_parser(fn.__name__, help=fn.__doc__) sub_parser.add_argument('--name', required=False, default='world', help="(default: 'world')") sub_parser.set_defaults(subcommand=fn) fn = byebye sub_parser = subparsers.add_parser(fn.__name__, help=fn.__doc__) sub_parser.add_argument('name') sub_parser.set_defaults(subcommand=fn)