FAQs
Known Issues
How to work around the 'cores licensing error?
>>> import pykx as kx
<frozen importlib._bootstrap>:228: PyKXWarning: Failed to initialize embedded q; falling back to unlicensed mode, which has limited functionality. Refer to https://code.kx.com/pykx/user-guide/advanced/modes.html for more information. Captured output from initialization attempt:
'2022.09.15T10:32:13.419 license error: cores
This error indicates your license is limited to a given number of cores but PyKX tried to use more cores than the license allows.
-
On Linux you can use
tasksetto limit the number of cores used by the python process and likewise PyKX and EmbeddedQ:# Example to limit python to the 4 first cores on a 8 cores CPU $ taskset -c 0-3 python -
You can also do this in python before importing PyKX (Linux only):
>>> import os >>> os.sched_setaffinity(0, [0, 1, 2, 3]) >>> import pykx as kx >>> kx.q('til 10') pykx.LongVector(pykx.q('0 1 2 3 4 5 6 7 8 9')) -
On Windows you can use the
startcommand with its/affinityargument (see:> help start):> start /affinity f python(above,
0xf = 00001111b, so the python process will only use the four cores for which the mask bits are equal to 1)
How does PyKX determine the license that is used?
The following outlines the paths searched for when loading PyKX
- Search for
kx.lic,kc.licandk4.liclicense files in this order within the following locations- Current working directory
- Location defined by environment variable
QLICif set - Location defined by environment variable
QHOMEif set
- If a license is not found use the following environment variables (if they are set) to install and make use of a license
KDB_LICENSE_B64pointing to a base64 encoded version of akc.liclicenseKDB_K4LICENSE_B64pointing to a base64 encoded version of ak4.liclicense
- If a license has not been located according to the above search you will be guided to install a license following a prompt based license installation walkthrough.
Can I use PyKX in a subprocess?
Yes, however doing so requires some considerations. To ensure that PyKX is initialized in a clean environment it is suggested that the creation of subprocesses reliant on PyKX should be done within a code block making use of the kx.PyKXReimport functionality as follows:
import pykx as kx
import subprocess
with kx.PyKXReimport():
subprocess.Popen(['python', 'file.py']) # Run Python with a file that imports PyKX
Failure to use this functionality can result in segmentation faults as noted in the troubleshooting guide here. For more information on the PyKXReimport functionality see its API documentation here.