Ir para conteúdo
Fórum Script Brasil
  • 0

Preciso de ajuda a incorporar um trabalho do ano passado com mateira deste ano!


storms

Pergunta

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 storms
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...