#!/usr/bin/env python
import Pyro.naming
import random, time
from threading import Thread
import random
from Pyro.errors import NamingError
import binascii
mustStop=0
def name():
return str(random.random())[-3:]
def nameG():
if random.random()>0.3:
return 'trasher.G'+name()+'.'+name()
else:
return 'trasher.'+name()
class NamingTrasher(Thread):
def __init__(self,number):
Thread.__init__(self)
self.number=number
def flatlist(self):
if random.random()>0.8:
try:
a=len(self.ns.flatlist())
except NamingError,x:
pass
def register(self):
for i in range(4):
try:
self.ns.register(nameG(),'PYRO://localhost/111111111')
except NamingError,x:
pass
def remove(self):
try:
self.ns.unregister(nameG())
except NamingError,x:
pass
def resolve(self):
try:
uri=self.ns.resolve(nameG())
except NamingError,x:
pass
def creategrp(self):
for i in range(3):
try:
self.ns.createGroup('trasher.G'+name())
except NamingError,x:
pass
def delgrp(self):
if random.random()>0.8:
try:
self.ns.deleteGroup('trasher.G'+name())
except NamingError,x:
pass
def run(self):
self.ns = Pyro.naming.NameServerLocator().getNS()
print 'Name Server trasher running.'
while not mustStop:
random.choice((self.flatlist, self.register, self.remove, self.resolve, self.creategrp, self.delgrp)) ()
print self.number,'called'
time.sleep(random.random()/10)
print 'Trasher exiting.'
def main():
Pyro.core.initClient()
threads=[]
ns = Pyro.naming.NameServerLocator().getNS()
ns.createGroup('trasher')
for i in range(10):
nt=NamingTrasher(i)
nt.start()
threads.append(nt)
try:
while 1:
time.sleep(10)
except KeyboardInterrupt:
global mustStop
mustStop=1
print 'Break-- waiting for threads to stop.'
for nt in threads:
nt.join()
ns.deleteGroup('trasher')
if __name__=='__main__':
main()
|