簡體   English   中英

從 Jupyter Notebook 中的文件“main.py”傳輸代碼

[英]Transferring code from a file "main.py " in Jupyter Notebook

我正在嘗試在 Jupiter 筆記本中運行代碼,但其中的數字不運行,請幫助我使用“matplotlib”庫在 pandas DataFrame 中顯示 BTC 圖

import websockets
import asyncio
import json
import time
import matplotlib.pyplot as plt


fig = plt.figure()
ax = fig.add_subplot(111)
fig.show()

xdata = []
ydata = []


def update_graph():
   ax.plot(xdata, ydata, color='g')
   ax.legend([f"Last price: {ydata[-1]}$"])

   fig.canvas.draw()
   plt.pause(0.1)


async def main():
    url = "wss://stream.binance.com:9443/stream?streams=btcusdt@miniTicker"
    async with websockets.connect(url) as client:
        while True:
           data = json.loads(await client.recv())['data']

           event_time = time.localtime(data['E'] // 1000)
           event_time = f"{event_time.tm_hour}:{event_time.tm_min}:   
           {event_time.tm_sec}"

           print(event_time, data['c'])

           xdata.append(event_time)
           ydata.append(int(float(data['c'])))

           update_graph()


if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

只需刪除此語句: if __name__ == '__main__':

Jupyter 運行代碼的方式與正常的 Python 不同。

當您使用python myfile.py運行代碼時,它會將名為__name__的變量設置為main 但是當 Jupyter 運行您的代碼時,它不會設置變量。

因此,當您說if __name__ == '__main__'時,它永遠不會在 Jupyter 中執行,因為__name__永遠不會是main

因此,解決方案是刪除if語句,只保留它下面的行。

改變

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

下午好:我在啟動時發布錯誤:

  • /opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: UserWarning: Matplotlib 目前正在使用module://ipykernel.pylab.backend_inline,這是一個非GUI后端,所以無法顯示圖. 這與 ipykernel package 是分開的,所以我們可以避免導入,直到

點擊查看錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM