Найти - Пользователи
Полная версия: Поделитесь тестовым заданием по Python
Начало » Флейм » Поделитесь тестовым заданием по Python
1 2 3 4 5 6 7 8
cutwater
О Jython: Забаньте его кто-нибудь.
Jython
что опять не так?
dmydry
и как понимать?
dmydry
в общем есть уже 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
а не проще ли попросить кандидата сделать не большое практическое задание схожее на вашу работу или попросить описать уже имеющийся код!
dmydry
sypper-pit
имеющегося кода очень много
а небольшое практическое задание - это и есть то, ответы на что прислали.. или я не понял чего-то?
Ferroman
Кузнецова берите.
dmydry
товарищ ваш? :)
Андрей Светлов
Обоим незачОт.
За time.sleep в клиенте. Так с twisted вообще нельзя - и свидетельство непонимания работы асинхронных систем. Нужен callLater если уж очень хочется. Плюс deferred не видно совсем - а должны бы быть… Об обработке ошибок говорить не приходится ввиду отсутствия deferred.
Отдельного потока - нет. Ротации логов - нет.
Настройка по номеру порта из command line - корявая. Стандартный путь - twisted services.
Но это уже все мелочи. Главная проблема - непонимание того, как twisted работает. Используют как asyncore какой-то. В условиях, когда рядом нет более опытного товарища, бьющего по рукам - наворотят проблем.

Второй кандидат чуть лучше, но все равно очень плохо.
dmydry
Андрей Светлов
Ferroman
спасибо, жду ещё комментариев..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB