session.run() не запускается должным образом при вызове из собственной библиотеки, использующей python

Я сделал библиотеку различных функций в Python, которые при вызове отображают отношения между узлами. Я сталкивался с проблемами, и когда я вызываю эти функции из библиотеки, они иногда работают. Когда я запускаю тот же код в основном файле, он выполняется отлично. Мой вопрос заключается в том, не рекомендуется ли запускать запросы для neo4j из библиотеки SELF MADE.

У меня есть функция, которая создает отношение между узлом A и узлом B. Это в цикле, который выполняется 5 раз. Но на удивление это создает только одно или два отношения между соответствующими узлами. Тот же код, когда я запускаю в основном файле, работает отлично.

Может ли кто-нибудь провести меня через это, например, когда я искал в Интернете, я не мог получить никаких ответов.

[РЕДАКТИРОВАТЬ 1]

import pymongo
from neo4j.v1 import GraphDatabase, basic_auth

class basics:
    def OEE(shift_length, break_time, stop_time, ideal_cycle_time, total_count, rejected_count, machine_name):
        driver = GraphDatabase.driver("bolt://172.104.44.80:7687", auth=basic_auth("neo4j", "root")) #Connects to tthe neo4j server
        session = driver.session() #Creates a session

        #avb = availability(shift_length, break_time, stop_time)
        planned_production_time = float(shift_length) - float(break_time)
        run_time = float(planned_production_time) - float(stop_time)
        avb = float(run_time) / float(planned_production_time)

        #perf = performance(ideal_cycle_time, total_count, shift_length, break_time, stop_time)
        perf = (float(ideal_cycle_time) * float(total_count)) / float(run_time)

        #qual = quality(rejected_count, total_count)
        good_count = float(total_count) - float(rejected_count)
        qual = float(good_count) / float(total_count)

        oee = float(avb) * float(perf) * float(qual)

        session.run("MATCH (n:Machine), (a:OEE) WHERE n.machine = {machine} AND a.name = 'OEE' CREATE (n)-[r:abc]->(a) RETURN r",
                    {"machine": machine_name})
        return oee 

Вышеупомянутый код является функцией. Он находится в библиотеке с названием basics, и я называю его в основном коде Python следующим образом:

import basics
basics.OEE(*all the parameters*)

(Я удалил цикл for здесь по какой-то причине, но этот код иногда отображается.)

1 ответ

Решение

Ваш код имеет одну проблему и одно улучшение:

  • открытая сессия должна быть где-то закрыта. Вы открыли один в начале, но я не вижу его закрытия.
  • Экземпляр драйвера должен быть общим для всех ваших действий Neo4j. Драйвер имеет пул соединений с базой данных, чтобы вы могли использовать их повторно. В своем коде вы каждый раз создаете новое соединение с базой данных.

Приветствия.

Другие вопросы по тегам