Форум сайта python.su
О Jython: Забаньте его кто-нибудь.
Отредактировано (Апрель 6, 2009 20:07:23)
Офлайн
что опять не так?
Офлайн
и как понимать?
Офлайн
в общем есть уже 2 ответа..
Кандидат, результаты которого на oDesk составили 2.25 из 5 сказал, что доделать задание не успел, но выслал результат проделанной работы:
Client:
from twisted.internet import reactor, protocol
import time
import datetime
class EchoClient(protocol.Protocol):
def connectionMade(self):
#
for i in range(3):
time.sleep(10)
self.transport.write(“%s %s ” % (i,datetime.datetime.now()))
def dataReceived(self, data):
print “Server:”, data
self.transport.loseConnection()
def connectionLost(self, reason):
print “connection lost”
class EchoFactory(protocol.ClientFactory):
protocol = EchoClient
def clientConnectionFailed(self, connector, reason):
print “Connection failed”
reactor.stop()
def clientConnectionLost(self, connector, reason):
print “Connection lost”
reactor.stop()
f = EchoFactory()
reactor.connectTCP(“localhost”, 8000, f)
reactor.run()
Server:
from twisted.internet import reactor, protocol
import datetime
class Echo(protocol.Protocol):
#Поминутная ротация логов…
CallMin=datetime.datetime.now().minute
def dataReceived(self, data):
SelfMin=datetime.datetime.now().minute
if data != ‘':
self.transport.write(’Data received')
else:
self.transport.write('Data not received')
for a in xrange(100):
logfile = open(“C:\\Temp\\logf”+str(a)+“.txt”, “w”)
print>>logfile, data+'\n'
logfile.close()
if CallMin<SelfMin: # минута прошла
continue
else:
break
#port 8000
factory = protocol.ServerFactory()
factory.protocol = Echo
reactor.listenTCP(8000,factory)
reactor.run()
Кандидат, результаты которого на oDesk составили 2.10 из 5 выслал готовый код с описанием запуска.
Client:
#!/usr/bin/python
# Copyright © 2009 kuznets.off.san by Kuznetsov Aleksandr
“”“
Create a cliet with data manipulate by TCP protocol
”“”
from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
from time import gmtime, strftime
import sys
import time
class EchoClient(LineReceiver):
“”“
Main class receive-send data and create
”“”
n=1
def connectionMade(self):
“”“
Starts client work
”“”
self.sendLine(str(self.n)+'-'+strftime(“%H:%M:%S ”, gmtime()))
def dataReceived(self, data):
“”“
Receive the data from the server and send the increment
and server time to the server, every 10 sec
”“”
self.n+=1
self.transport.write(str(self.n)+'-'+strftime(“%H:%M:%S ”, gmtime()))
print “Server said:”, data
time.sleep(10)
class EchoClientFactory(ClientFactory):
“”“
Defined the protocol and raise exeption when connect lost
”“”
protocol = EchoClient
def clientConnectionFailed(self, connector, reason):
print ‘connection failed:’, reason.getErrorMessage()
reactor.stop()
def clientConnectionLost(self, connector, reason):
print ‘connection lost:’, reason.getErrorMessage()
reactor.stop()
def main():
factory = EchoClientFactory()
reactor.connectTCP('localhost', int(sys.argv), factory)
reactor.run()
if __name__ == ‘__main__’:
main()
Server:
#!/usr/bin/python
# Copyright © 2009 kuznets.off.san by Kuznetsov Aleksandr
“”“
Create a server with data manipulate by TCP protocol
”“”
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
from time import gmtime, strftime
import logging
import sys
### Protocol Implementation
class Echo(Protocol):
“”“
Main class receive-send data and create a writeble log file
”“”
LOG_FILENAME = ‘c:\\log.txt’
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
i=1
def dataReceived(self, data):
“”“
Receive data from client, write it down the log file,
and sent back result to client
”“”
s=strftime(“%S ”, gmtime())
self.transport.write(data)
logging.debug(data)
if self.i%6==0:
self.transport.write(self.LOG_FILENAME)
self.i+=1
def main():
f = Factory()
f.protocol = Echo
reactor.listenTCP(int(sys.argv), f)
reactor.run()
if __name__ == ‘__main__’:
main()
Содержание задания в первом посте этой темы.
Прошу прокомментировать специалистов то, что выполнили кандидаты.
Офлайн
а не проще ли попросить кандидата сделать не большое практическое задание схожее на вашу работу или попросить описать уже имеющийся код!
Офлайн
sypper-pit
имеющегося кода очень много
а небольшое практическое задание - это и есть то, ответы на что прислали.. или я не понял чего-то?
Офлайн
Кузнецова берите.
Офлайн
товарищ ваш? :)
Офлайн
Обоим незачОт.
За time.sleep в клиенте. Так с twisted вообще нельзя - и свидетельство непонимания работы асинхронных систем. Нужен callLater если уж очень хочется. Плюс deferred не видно совсем - а должны бы быть… Об обработке ошибок говорить не приходится ввиду отсутствия deferred.
Отдельного потока - нет. Ротации логов - нет.
Настройка по номеру порта из command line - корявая. Стандартный путь - twisted services.
Но это уже все мелочи. Главная проблема - непонимание того, как twisted работает. Используют как asyncore какой-то. В условиях, когда рядом нет более опытного товарища, бьющего по рукам - наворотят проблем.
Второй кандидат чуть лучше, но все равно очень плохо.
Офлайн
Андрей Светлов
Ferroman
спасибо, жду ещё комментариев..
Офлайн