Lewati ke isi

Pengembangan Skrip / Skrip Pra-eksekusi

Ditambahkan pada versi 2.6.18

Meskipun DataFlux Func telah menyediakan alat PIP untuk memasang paket Python pihak ketiga, mungkin tidak dapat digunakan dengan normal karena kurangnya pustaka dependensi.

Jika pengguna perlu menggunakan OpenCV di DataFlux Func, selain memasang opencv-python, mereka juga perlu memasang pustaka dependensi melalui apt atau cara lainnya.

Jika tidak, masalah seperti berikut dapat terjadi:

dependency-error.png

1. Menggunakan Skrip Pra-eksekusi untuk Mengatasi Dependensi

Untuk mengatasi masalah ini, Anda dapat menyediakan Skrip pra-eksekusi kepada DataFlux Func; Skrip pra-eksekusi akan dijalankan sebelum DataFlux Func dimulai, sehingga dependensi yang diperlukan dapat dipasang.

Langkah-langkah spesifiknya adalah sebagai berikut:

1.1 Menyiapkan Skrip

Image DataFlux Func didasarkan pada Ubuntu:22.04.

Sebagai contoh untuk mengatasi masalah dependensi OpenCV di atas, Anda dapat menyiapkan Skrip Bash berikut.

Memasang Dependensi OpenCV
1
2
apt-get update
apt-get install -y libgl1-mesa-glx libglib2.0-0 libsm6 libxext6 libxrender-dev

Simpan sebagai file prepare-for-opencv.sh.

Nama file bebas, tetapi harus diakhiri dengan .sh. Untuk menghindari masalah yang tidak perlu, jangan gunakan Unicode atau simbol tidak umum lainnya pada nama file

Membedakan Lingkungan Eksekusi

DataFlux Func terdiri dari sisi Server dan sisi Worker.

  • Sisi Server terutama adalah server HTTP, menyediakan halaman Web dan API HTTP, dan tidak berpartisipasi dalam eksekusi kode Python.
  • Sisi Worker adalah layanan yang benar-benar mengeksekusi kode Python.

Oleh karena itu, dalam sebagian besar kasus, Skrip pra-eksekusi hanya perlu dijalankan di Worker.

Jika perlu membedakan lingkungannya, Anda dapat membaca $1 untuk menentukan apakah nilainya server atau worker.

Layanan Beat, layanan MySQL, dan layanan Redis tidak menjalankan Skrip pra-eksekusi

Kode Bash referensi untuk membedakannya adalah sebagai berikut:

Hanya Dijalankan di Kontainer Worker
1
2
3
if [ $1 != 'worker' ]; then
    exit 0
fi
Hanya Dijalankan di Kontainer Server
1
2
3
if [ $1 != 'server' ]; then
    exit 0
fi

1.2 Mengunggah Skrip

Direktori penyimpanan Skrip pra-eksekusi adalah sebagai berikut:

Lingkungan Lokasi
Di dalam kontainer /data/resources/pre-run-scripts/
Di host {direktori-instalasi}/data/resources/pre-run-scripts/

Pengguna dapat menempatkan Skrip pra-eksekusi ke dalamnya di host.

Anda juga dapat masuk ke manajemen file DataFlux Func dan mengunggah Skrip pra-eksekusi yang ditulis sendiri:

enable-file-manager.png

upload-script.png

script-ready.png

1.3 Memulai Ulang Func dan Memverifikasi

Setelah semua persiapan selesai, mulai ulang DataFlux Func

Kembali ke Skrip sebelumnya dan jalankan lagi, Anda akan melihat bahwa pustaka opencv-python sudah dapat diimpor dengan benar:

import-ok.png

2. Detail Eksekusi Skrip Pra-eksekusi

Setiap kali DataFlux Func dimulai, terlebih dahulu akan memeriksa apakah terdapat Skrip pra-eksekusi.

Ketika terdapat Skrip pra-eksekusi, DataFlux Func akan mengurutkannya berdasarkan nama dan menjalankannya secara berurutan, dan DataFlux Func baru akan dimulai secara normal jika semua Skrip berhasil dijalankan.

Jika perlu mengamati proses eksekusi Skrip pra-eksekusi, Anda dapat mengikutinya dengan perintah berikut:

Lihat Log Kontainer
1
docker logs {ID Kontainer DataFlux Func} -f

Dengan Skrip pra-eksekusi di atas sebagai contoh, Anda dapat melihat output sebagai berikut:

Log Eksekusi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[PRERUN SCRIPT] prepare-for-opencv.sh
Hit:1 http://ports.ubuntu.com/ubuntu-ports jammy InRelease
Get:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [128 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease [127 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [129 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 Packages [1528 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 Packages [2960 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports jammy-updates/restricted arm64 Packages [3920 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports jammy-backports/main arm64 Packages [82.8 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports jammy-backports/universe arm64 Packages [33.3 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports jammy-security/universe arm64 Packages [1230 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports jammy-security/main arm64 Packages [2656 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports jammy-security/restricted arm64 Packages [3777 kB]
Diunduh 16.6 MB dalam 18 detik (923 kB/s)
Membaca daftar paket...
Membaca daftar paket...
Membangun pohon dependensi...
Membaca informasi status...
libxext6 sudah merupakan versi terbaru (2:1.3.4-1build1).
libxext6 disetel untuk dipasang secara manual.
Paket tambahan berikut akan dipasang:
  libdrm-amdgpu1 libdrm-common libdrm-nouveau2 libdrm-radeon1 libdrm2 libgl1
  libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglib2.0-data libglvnd0
  libglx-mesa0 libglx0 libice6 libllvm15 libpthread-stubs0-dev libx11-dev
  libx11-xcb1 libxau-dev libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0
  libxcb-present0 libxcb-randr0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0
  libxcb1-dev libxdmcp-dev libxfixes3 libxrender1 libxshmfence1 libxxf86vm1
  shared-mime-info x11-common x11proto-dev xdg-user-dirs xorg-sgml-doctools
  xtrans-dev
Paket yang disarankan:
  libx11-doc libxcb-doc
Paket BARU berikut akan dipasang:
  libdrm-amdgpu1 libdrm-common libdrm-nouveau2 libdrm-radeon1 libdrm2 libgl1
  libgl1-amber-dri libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglib2.0-0
  libglib2.0-data libglvnd0 libglx-mesa0 libglx0 libice6 libllvm15
  libpthread-stubs0-dev libsm6 libx11-dev libx11-xcb1 libxau-dev libxcb-dri2-0
  libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shm0
  libxcb-sync1 libxcb-xfixes0 libxcb1-dev libxdmcp-dev libxfixes3
  libxrender-dev libxrender1 libxshmfence1 libxxf86vm1 shared-mime-info
  x11-common x11proto-dev xdg-user-dirs xorg-sgml-doctools xtrans-dev
0 ditingkatkan, 43 baru dipasang, 0 dihapus, dan 27 tidak ditingkatkan.
Perlu mengunduh arsip sebesar 38.4 MB.
Setelah operasi ini, 163 MB ruang disk tambahan akan digunakan.
Get:1 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 libglib2.0-0 arm64 2.72.4-0ubuntu2.5 [1435 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 libglib2.0-data all 2.72.4-0ubuntu2.5 [4656 B]
Get:3 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 shared-mime-info arm64 2.1-2 [453 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 xdg-user-dirs arm64 0.17-2ubuntu4 [53.5 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 libdrm-common all 2.4.113-2~ubuntu0.22.04.1 [5450 B]

...

Dapat dilihat bahwa Skrip pra-eksekusi telah dijalankan dengan benar dan menginstal paket dependensi yang diperlukan.

3. Mengganti Paket Python dalam Image

Dalam beberapa kasus, paket yang dibutuhkan pengguna dalam Skrip tidak kompatibel dengan versi paket yang sudah disertakan dalam image Func.

Dalam kasus ini, Anda juga dapat menggunakan 'Skrip pra-eksekusi' untuk mengganti paket, seperti:

Menginstal paket simplejson versi terbaru
1
pip install -u simplejson

Karena 'Skrip pra-eksekusi' dijalankan sebelum Func dimulai, paket yang diinstal PIP tidak hanya memengaruhi Skrip pengguna, tetapi juga seluruh DataFlux Func.

Oleh karena itu, saat menggunakannya, pastikan operasi ini tidak memengaruhi jalannya DataFlux Func itu sendiri.