como o titulo diz, preciso de ajuda a incorporar um trabalho que fiz no ano passado(em grupo de 5!!!!), que contem uma database de bancos e as suas accoes na bolsa, e tem funcoes de comprar e vender acoes, com a materia deste ano, que é de sockets.
já fiz o servidor a aceitar ligacoes multithreading, mas, vou ser muito honesto galera, não percebo p**** disto! sockets até sou bom, mas agora threading é mesmo chines.....
o que eu tenho:
trabalho do ano passado:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import random
from multiprocessing import Process, Value, Array, Lock, Manager
from ctypes import c_char_p
#Dicionário com nome da ação como key e quantidade, abertura e cotação atual
#como value
stock_var_data_in = {'Altri': [10000, 4.3910, 4.3910],
'BCP': [10000, 0.2312, 0.2312],
'Corticeira Amorim': [10000, 12.2500, 12.2500],
'CTT': [10000, 5.5480, 5.5480],
'EDP': [10000, 3.2840, 3.2840],
'EDP Renovaveis': [10000, 6.9910, 6.9910],
'Galp Energia': [10000, 13.7850, 13.7850],
'Ibersol': [10000, 14.9000, 14.9000],
'Jeronimo Martins': [10000, 17.5600, 17.5600],
'Mota-Engil': [10000, 2.7340, 2.7340],
'NOS': [10000, 5.5150, 5.5150],
'Novabase': [10000, 3.2390, 3.2390],
'Pharol': [10000, 0.2690, 0.2690],
'REN': [10000, 2.8680, 2.8680],
'Semapa': [10000, 16.7000, 16.7000],
'Sonae Capital': [10000, 0.8740, 0.8740],
'Sonae SGPS': [10000, 0.9260, 0.9260],
'Navigator': [10000, 4.0720, 4.0720],
'Montepio UP': [10000, 0.7470, 0.7470]}
lista_acoes_suspensas = Array(c_char_p, len(stock_var_data_in))
index = Value ("i", 0) #índice da lista_acoes_suspensas
suspensas = False #Flag para sinalizar ações suspensas
mutex = Lock()
m = Manager()
stock_var_data = m.dict()
#Inicialização do dicionário partilhado
for j in stock_var_data_in.keys():
stock_var_data[j] = stock_var_data_in[j]
print("\nDicionário partilhado com os valores iniciais:\n")
#print stock_var_data
for item in stock_var_data.items():
print (item)
print("\nOrdens dadas:\n")
def transaction(i, stock_dict):
orders = 0
while orders < 10: # variacao positiva ou negativa 10% da cotacao da accao.
mutex.acquire()
#Escolher ação a comprar
stock_name = random.choice(stock_var_data_in.keys())
if stock_name in lista_acoes_suspensas:
print(i, stock_name + " não pode ser negociada, está suspensa.\n")
mutex.release()
continue
else:
orders += 1
stock_quantity = random.randint(1,500)
quote = stock_dict[stock_name] #value da key 'stock_name'
#Escolher a cotação de compra ou venda (+-1% da cotação atual)
stock_value = round(random.uniform((0.99 * quote[2]),
(1.01 * quote[2])),4)
if stock_value - quote[2] >= 0: #Simulação de Compra
print("%s, ordem %d: Compra de %d ações da %s a %g euros.") \
% (i, orders, stock_quantity, stock_name, stock_value)
sq_upd = stock_dict[stock_name][0] - stock_quantity
stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1],
stock_value]
else: #Simulação de Venda
print("%s, ordem %d: Venda de %d ações da %s a %g euros.") \
% (i, orders, stock_quantity, stock_name, stock_value)
sq_upd = stock_dict[stock_name][0] + stock_quantity
stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1],
stock_value]
#Acções a negociar acima ou abaixo de 10% da abertura?
if stock_value/quote[1] > 1.10 or stock_value/quote[1] < 0.9:
print("\nVariação de " + \
str(round((stock_value/quote[1]-1)*100, 2)) + "%." + \
" CMVM suspendeu a %s.\n" % stock_name)
lista_acoes_suspensas[index.value] = stock_name
index.value += 1
#print "CMVM suspendeu a %s." % stock_name
mutex.release()
Banco1 = Process(target=transaction, args=('Banco1', stock_var_data,))
Banco2 = Process(target=transaction, args=('Banco2', stock_var_data,))
Banco3 = Process(target=transaction, args=('Banco3', stock_var_data,))
Banco1.start()
Banco2.start()
Banco3.start()
Banco1.join()
Banco2.join()
Banco3.join()
print("\nDicionário partilhado atualizado no final das 30 ordens:\n")
for item in stock_var_data.items():
print (item)
print("\nLista de ações suspensas na sessão:\n")
for i in lista_acoes_suspensas:
if str(i) != 'None':
print(i + ",",)
suspensas = True
if not suspensas: print("Não houve acões suspensas na sessão.")
print("\n\nPrograma Terminado.\n")
o meu servidor multithreading:
import socket
import sys
from _thread import *
host = ""
port = 8000
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket Created")
try:
serversocket.bind((host, port))
except socket.error as e:
print(str(e))
sys.exit()
print("Socket has been bounded")
serversocket.listen(10)
print("Socket is ready")
print("Server online and listening")
def client_thread(conn):
welcome = "Welcome to the server. Type something and hit enter \n"
conn.send(welcome.encode())
while True:
data = conn.recv(1024)
reply = "OK." + data.decode()
if not data:
break;
print(reply)
conn.sendall(data)
conn.close()
while 1:
conn, addr = serversocket.accept()
print("Connected with " + addr[0] + ":" + str(addr[1]))
start_new_thread(client_thread, (conn, ))
serversocket.close()
preciso de juntar os dois, para depois fazer um cliente onde possa chamar as funcoes comprar, vender e ver balanco.
acham que me conseguem ajudar? não percebo nada disto
edit: o trabalho do ano passado foi dado em python 2, eu já estive a tentar fazer a conversao mas sem sucesso.
Pergunta
storms
Bom dia malta!
como o titulo diz, preciso de ajuda a incorporar um trabalho que fiz no ano passado(em grupo de 5!!!!), que contem uma database de bancos e as suas accoes na bolsa, e tem funcoes de comprar e vender acoes, com a materia deste ano, que é de sockets.
já fiz o servidor a aceitar ligacoes multithreading, mas, vou ser muito honesto galera, não percebo p**** disto! sockets até sou bom, mas agora threading é mesmo chines.....
o que eu tenho:
trabalho do ano passado:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import random from multiprocessing import Process, Value, Array, Lock, Manager from ctypes import c_char_p #Dicionário com nome da ação como key e quantidade, abertura e cotação atual #como value stock_var_data_in = {'Altri': [10000, 4.3910, 4.3910], 'BCP': [10000, 0.2312, 0.2312], 'Corticeira Amorim': [10000, 12.2500, 12.2500], 'CTT': [10000, 5.5480, 5.5480], 'EDP': [10000, 3.2840, 3.2840], 'EDP Renovaveis': [10000, 6.9910, 6.9910], 'Galp Energia': [10000, 13.7850, 13.7850], 'Ibersol': [10000, 14.9000, 14.9000], 'Jeronimo Martins': [10000, 17.5600, 17.5600], 'Mota-Engil': [10000, 2.7340, 2.7340], 'NOS': [10000, 5.5150, 5.5150], 'Novabase': [10000, 3.2390, 3.2390], 'Pharol': [10000, 0.2690, 0.2690], 'REN': [10000, 2.8680, 2.8680], 'Semapa': [10000, 16.7000, 16.7000], 'Sonae Capital': [10000, 0.8740, 0.8740], 'Sonae SGPS': [10000, 0.9260, 0.9260], 'Navigator': [10000, 4.0720, 4.0720], 'Montepio UP': [10000, 0.7470, 0.7470]} lista_acoes_suspensas = Array(c_char_p, len(stock_var_data_in)) index = Value ("i", 0) #índice da lista_acoes_suspensas suspensas = False #Flag para sinalizar ações suspensas mutex = Lock() m = Manager() stock_var_data = m.dict() #Inicialização do dicionário partilhado for j in stock_var_data_in.keys(): stock_var_data[j] = stock_var_data_in[j] print("\nDicionário partilhado com os valores iniciais:\n") #print stock_var_data for item in stock_var_data.items(): print (item) print("\nOrdens dadas:\n") def transaction(i, stock_dict): orders = 0 while orders < 10: # variacao positiva ou negativa 10% da cotacao da accao. mutex.acquire() #Escolher ação a comprar stock_name = random.choice(stock_var_data_in.keys()) if stock_name in lista_acoes_suspensas: print(i, stock_name + " não pode ser negociada, está suspensa.\n") mutex.release() continue else: orders += 1 stock_quantity = random.randint(1,500) quote = stock_dict[stock_name] #value da key 'stock_name' #Escolher a cotação de compra ou venda (+-1% da cotação atual) stock_value = round(random.uniform((0.99 * quote[2]), (1.01 * quote[2])),4) if stock_value - quote[2] >= 0: #Simulação de Compra print("%s, ordem %d: Compra de %d ações da %s a %g euros.") \ % (i, orders, stock_quantity, stock_name, stock_value) sq_upd = stock_dict[stock_name][0] - stock_quantity stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1], stock_value] else: #Simulação de Venda print("%s, ordem %d: Venda de %d ações da %s a %g euros.") \ % (i, orders, stock_quantity, stock_name, stock_value) sq_upd = stock_dict[stock_name][0] + stock_quantity stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1], stock_value] #Acções a negociar acima ou abaixo de 10% da abertura? if stock_value/quote[1] > 1.10 or stock_value/quote[1] < 0.9: print("\nVariação de " + \ str(round((stock_value/quote[1]-1)*100, 2)) + "%." + \ " CMVM suspendeu a %s.\n" % stock_name) lista_acoes_suspensas[index.value] = stock_name index.value += 1 #print "CMVM suspendeu a %s." % stock_name mutex.release() Banco1 = Process(target=transaction, args=('Banco1', stock_var_data,)) Banco2 = Process(target=transaction, args=('Banco2', stock_var_data,)) Banco3 = Process(target=transaction, args=('Banco3', stock_var_data,)) Banco1.start() Banco2.start() Banco3.start() Banco1.join() Banco2.join() Banco3.join() print("\nDicionário partilhado atualizado no final das 30 ordens:\n") for item in stock_var_data.items(): print (item) print("\nLista de ações suspensas na sessão:\n") for i in lista_acoes_suspensas: if str(i) != 'None': print(i + ",",) suspensas = True if not suspensas: print("Não houve acões suspensas na sessão.") print("\n\nPrograma Terminado.\n")
o meu servidor multithreading:
import socket import sys from _thread import * host = "" port = 8000 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print("Socket Created") try: serversocket.bind((host, port)) except socket.error as e: print(str(e)) sys.exit() print("Socket has been bounded") serversocket.listen(10) print("Socket is ready") print("Server online and listening") def client_thread(conn): welcome = "Welcome to the server. Type something and hit enter \n" conn.send(welcome.encode()) while True: data = conn.recv(1024) reply = "OK." + data.decode() if not data: break; print(reply) conn.sendall(data) conn.close() while 1: conn, addr = serversocket.accept() print("Connected with " + addr[0] + ":" + str(addr[1])) start_new_thread(client_thread, (conn, )) serversocket.close()
preciso de juntar os dois, para depois fazer um cliente onde possa chamar as funcoes comprar, vender e ver balanco.
acham que me conseguem ajudar? não percebo nada disto
edit: o trabalho do ano passado foi dado em python 2, eu já estive a tentar fazer a conversao mas sem sucesso.
Editado por stormsLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.