def main(argv): if len(argv) != 4: print "Usage: portscan_cg.py localhost 1 80" return 1 host = argv[1] start = int(argv[2]) end = int(argv[3]) r = cg.Receiver() r[Result] = lambda m: m, cg.Message scanners = [cg.spawn(scan) for i in range(0, NUM_OF_WORKERS)] i = 0 for port in range(start, end + 1): scanners[i] | (cg.self(), Target(host, port)) i += 1 if i == NUM_OF_WORKERS: i = 0 port_count = end - start + 1 ports = [] j = 0 while j != port_count: result = r.receive() j += 1 if result.is_success: ports.append(result.port) ports.sort() for port in ports: print "Connected to port %s" % port return 0
def testReset(self): # test that Receiver resets pointer back to front of mailbox after switching # to another process r1 = cg.Receiver() r1.addHandler(1, cg.self().send, "one") proc1 = cg.spawn(self.receive, r1) proc1.send(2) proc1.send(1) r = cg.Receiver() r.addHandler("one", lambda: "success") assert r.receive(1000) == "success" proc2 = cg.spawn(self.receive, r1) proc2.send(1) assert r.receive(1000) == "success" cg.exit(proc1, "kill") cg.exit(proc2, "kill")
def test2(self): import candygram as cg import time def proc_func(): r = cg.Receiver() r.addHandler("land shark", shut_door, cg.Message) r.addHandler("candygram", open_door, cg.Message) for message in r: print >> self.out, message def shut_door(name): return "Go Away " + name def open_door(name): return "Hello " + name proc = cg.spawn(proc_func) proc.send("land shark") proc.send("candygram") # Give the proc a chance to print its messages before termination: time.sleep(1) cg.exit(proc, "kill") # Assert print statements worked as advertised assert self.out.getvalue( ) == "Go Away land shark\n" "Hello candygram\n"
def testReset(self): # test that Receiver resets pointer back to front of mailbox after switching # to another process r1 = cg.Receiver() r1.addHandler(1, cg.self().send, 'one') proc1 = cg.spawn(self.receive, r1) proc1.send(2) proc1.send(1) r = cg.Receiver() r.addHandler('one', lambda: 'success') self.assertEqual(r.receive(1000), 'success') proc2 = cg.spawn(self.receive, r1) proc2.send(1) self.assertEqual(r.receive(1000), 'success') cg.exit(proc1, 'kill') cg.exit(proc2, 'kill')
def testMultiProc(self): r1 = cg.Receiver() r1.addHandler(1, cg.self().send, "one") proc1 = cg.spawn(self.receive, r1) proc2 = cg.spawn(self.receive, r1) proc1.send(1) proc2.send(1) r = cg.Receiver() r.addHandler("one", lambda: "success") assert r.receive(1000) == "success" assert r.receive(1000) == "success" proc3 = cg.spawn(self.receive, r1) proc3.send(1) assert r.receive(1000) == "success" cg.exit(proc1, "kill") cg.exit(proc2, "kill") cg.exit(proc3, "kill")
def testSpawnMyProcess(self): proc = cg.spawn(echo, cg.self(), _processClass=MyProcess) self.assert_(isinstance(proc, MyProcess)) proc.send('test') r = cg.Receiver() r.addHandler(cg.Any, lambda m: m, cg.Message) self.assertEqual(r.receive(), ('MyProcess', 'test')) cg.exit(proc, 'kill')
def testSpawnMyProcess(self): proc = cg.spawn(echo, cg.self(), _processClass=MyProcess) assert isinstance(proc, MyProcess) proc.send("test") r = cg.Receiver() r.addHandler(cg.Any, lambda m: m, cg.Message) assert r.receive() == ("MyProcess", "test") cg.exit(proc, "kill")
def testMultiProc(self): r1 = cg.Receiver() r1.addHandler(1, cg.self().send, 'one') proc1 = cg.spawn(self.receive, r1) proc2 = cg.spawn(self.receive, r1) proc1.send(1) proc2.send(1) r = cg.Receiver() r.addHandler('one', lambda: 'success') self.assertEqual(r.receive(1000), 'success') self.assertEqual(r.receive(1000), 'success') proc3 = cg.spawn(self.receive, r1) proc3.send(1) self.assertEqual(r.receive(1000), 'success') cg.exit(proc1, 'kill') cg.exit(proc2, 'kill') cg.exit(proc3, 'kill')
def testSingleProc(self): r = cg.Receiver() r.addHandler(1, cg.self().send, "one") proc = cg.spawn(self.receive, r) proc.send(1) r = cg.Receiver() r.addHandler("one", lambda: "success") assert r.receive(1000) == "success" cg.exit(proc, "kill")
def testSingleProc(self): r = cg.Receiver() r.addHandler(1, cg.self().send, 'one') proc = cg.spawn(self.receive, r) proc.send(1) r = cg.Receiver() r.addHandler('one', lambda: 'success') self.assertEqual(r.receive(1000), 'success') cg.exit(proc, 'kill')
def test(dict): proc = cg.spawn(dict['s1']) proc.send('msg_a') proc.send('msg_x') proc.send('msg_b') proc.send('msg_c') proc.send('msg_y') proc.send('msg_h') proc.send('msg_i') time.sleep(PAUSE) self.assert_(proc.isAlive()) self.assertEqual(len(proc._mailbox), 0) proc.send('msg_a') proc.send('msg_x') time.sleep(PAUSE) self.assertEqual(len(proc._mailbox), 2) cg.exit(proc, 'kill')
def test(dict): proc = cg.spawn(dict["s1"]) proc.send("msg_a") proc.send("msg_x") proc.send("msg_b") proc.send("msg_c") proc.send("msg_y") proc.send("msg_h") proc.send("msg_i") time.sleep(PAUSE) assert proc.isAlive() assert len(proc._mailbox) == 0 proc.send("msg_a") proc.send("msg_x") time.sleep(PAUSE) assert len(proc._mailbox) == 2 cg.exit(proc, "kill")
def sampleSpawn(): """Start GUI event loop in separate process""" # Unique value used to acknowledge that the wx.App has been created: ack = object() # Unique value used to signal a receive() timeout: timeout = object() # Spawn a new wxProcess, calling mainLoop(): proc = cg.spawn(mainLoop, cg.self(), ack, _processClass=wxProcess) # We wait for acknowledgement from the spawned process before proceeding, # since we should make sure that the wx.App has been instantiated before # allowing anyone to send messages to the process. r = cg.Receiver() r.addHandler(ack) # Wait at most 30 seconds. result = r.receive(30000, lambda: timeout) assert result is not timeout return proc
def sampleSpawn(): """Start GUI event loop in separate process""" # Unique value used to acknowledge that the wx.App has been created: ack = object() # Unique value used to signal a receive() timeout: timeout = object() # Spawn a new wxProcess, calling mainLoop(): proc = cg.spawn(mainLoop, cg.self(), ack, _processClass=wxProcess) # We wait for acknowledgement from the spawned process before proceeding, # since we should make sure that the wx.App has been instantiated before # allowing anyone to send messages to the process. r = cg.Receiver() r.addHandler(ack) # Wait at most 30 seconds. result = r.receive(30000, lambda: timeout) assert result is not timeout return proc
def test2(self): import candygram as cg import time def proc_func(): r = cg.Receiver() r.addHandler('land shark', shut_door, cg.Message) r.addHandler('candygram', open_door, cg.Message) for message in r: print >> self.out, message def shut_door(name): return 'Go Away ' + name def open_door(name): return 'Hello ' + name proc = cg.spawn(proc_func) proc.send('land shark') proc.send('candygram') # Give the proc a chance to print its messages before termination: time.sleep(1) cg.exit(proc, 'kill') # Assert print statements worked as advertised self.assertEqual(self.out.getvalue(), 'Go Away land shark\n' \ 'Hello candygram\n')
""" 将运行标志设成False """ self.running = False def run(self): """ 线程的入口点 """ #Register the handle functions for various messages: r = cg.Receiver() r.addHandler('increment', self.increment) r.addHandler((cg.Process, 'value'), self.sendVal, cg.Message) r.addHandler('stop', self.setStop) #断续处理新消息,直到被要求结束 while self.running: r.receive() #为了启动一个线程,要这样做 counter = cg.spawn(ExampleThread().run) #为了处理counter线程的回应,需要一个Receiver对象,并且正确注册: response = cg.Receiver() response.addHandler((counter, int), lambda msg: msg[1], cg.Message) #示例 counter.send('increment') counter.send('increment') #请求线程的当前值,并打印线程的回应 counter.send((cg.self(), 'value')) print response.receive() #告诉线程再递增一次 counter.send('increment') #再次请求线程的当前值,并打印线程的回应 counter.send((cg.self(), 'value')) print response.receive()
self.running = False def run(self): """ 线程的入口点 """ #Register the handle functions for various messages: r = cg.Receiver() r.addHandler('increment', self.increment) r.addHandler((cg.Process, 'value'), self.sendVal, cg.Message) r.addHandler('stop', self.setStop) #断续处理新消息,直到被要求结束 while self.running: r.receive() #为了启动一个线程,要这样做 counter = cg.spawn(ExampleThread().run) #为了处理counter线程的回应,需要一个Receiver对象,并且正确注册: response = cg.Receiver() response.addHandler((counter, int), lambda msg: msg[1], cg.Message) #示例 counter.send('increment') counter.send('increment') #请求线程的当前值,并打印线程的回应 counter.send((cg.self(), 'value')) print response.receive() #告诉线程再递增一次 counter.send('increment') #再次请求线程的当前值,并打印线程的回应 counter.send((cg.self(), 'value')) print response.receive()
def run(self): """Entry point of thread.""" # Register the handler functions for various messages: r = cg.Receiver() r.addHandler('increment', self.increment) r.addHandler((cg.Process, 'value'), self.sendVal, cg.Message) r.addHandler('stop', self.setStop) # Keep handling new messages until the stop flag is set. while not self.stop: r.receive() # end while # Create new thread. counter = cg.spawn(Thread().run) # Define a receiver that will return the thread's response values: response = cg.Receiver() response.addHandler((counter, int), lambda msg: msg[1], cg.Message) # Tell thread to increment twice. counter.send('increment') counter.send('increment') # Request thread's current value. counter.send((cg.self(), 'value')) # Print the response print response.receive() # Tell thread to increment one more time. counter.send('increment') # And print it's current value. counter.send((cg.self(), 'value')) print response.receive()
def run(self): """Entry point of thread.""" # Register the handler functions for various messages: r = cg.Receiver() r.addHandler('increment', self.increment) r.addHandler((cg.Process, 'value'), self.sendVal, cg.Message) r.addHandler('stop', self.setStop) # Keep handling new messages until the stop flag is set. while not self.stop: r.receive() # end while # Create new thread. counter = cg.spawn(Thread().run) # Define a receiver that will return the thread's response values: response = cg.Receiver() response.addHandler((counter, int), lambda msg: msg[1], cg.Message) # Tell thread to increment twice. counter.send('increment') counter.send('increment') # Request thread's current value. counter.send((cg.self(), 'value')) # Print the response print response.receive() # Tell thread to increment one more time. counter.send('increment') # And print it's current value. counter.send((cg.self(), 'value')) print response.receive()